2012-02-01から1ヶ月間の記事一覧

std::setでデータ同士の間に順位付けができないと無視されてしまう件

#include <stdio.h> #include <set> using namespace std; struct Data{ int a,b; }; Data makeD(int aa,int bb){ Data d; d.a=aa,d.b=bb; return d; } bool operator < (const Data &d,const Data &e){ return d.a<e.a; } int main(){ set<Data> se; se.insert(makeD(0,1)); se.insert(makeD(0,2)); pri</e.a;></set></stdio.h>…

HaskellでBrainfuckの処理系を実装する

Brainfuckとは http://ja.wikipedia.org/wiki/Brainfuck プログラムの動かし方 runghc Brainfuck.hs Brainfuckのソースコード] 課題 '.' ポインタが指す値を出力に書き出す。C言語の「putchar(*ptr);」に相当。 IOモナドを使いたくない(使えない)のでマシン…

情報オリンピックの過去問の入出力をチェックするのに便利だったコマンド

nkf -Lu -overwrite TEST.txt とやるとファイル中のCRLFが全てLFになって便利だった。

JOI2007 春合宿 1日目 2番

Factorial: 階乗

解法 nを素因数分解して p1^e1*p2^e2*p3^e3*......pr^erとなったとき、 m1!%p1^e1==0,m2!%p2^e2,m3!%p3^e3,.....となる 最小のm1,m2,m3...を求めて m1,m2,m3....の中で最も大きな値が答え #include <stdio.h> #include <vector> #include <map> using namespace std; typedef long </map></vector></stdio.h>…

AOJ 1203

問題文要約 記号を含む文字列が与えられるので、記号を除いて小文字を大文字に変換した後その文字列が含む回文を列挙せよ。ただしcXcとなる回文が存在した場合Xを出力してはならない。 解法 dp[i][j]=(i文字目からj文字目までが回文となっているかどうか) で…

AOJ 1204

解法 最後のnクロックの状態と次にpipelineに入れられる仕事の番号を使って拡張ダイクストラをする。int dist[21][1 //AOJ1204 #include <stdio.h> #include <vector> #include <string> #include <string.h> #include <queue> #include <map> #include <set> #define INF (1<<20) #define W 10 using namespace s</set></map></queue></string.h></string></vector></stdio.h>…

JOI2012本選5番

ダイクストラして最大全域木求めてLCAする全部入り問題。 #include <vector> #include <queue> #include <stdio.h> #include <algorithm> #include <string.h> #include <queue> #define MAX_V 100000+10 #define MAX_Q 100000+10 #define INF (1<<28) #define ROOT 1 using namespace std; struct Edge{ int to,c</queue></string.h></algorithm></stdio.h></queue></vector>…

JOI2012本選4番

講義資料 - いもす研 (imos laboratory) ↑参照。 累積和を使ったコード #include <stdio.h> int nails[5010][5010]; int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=0;i</stdio.h>

JOI2012本選3番

時間がSにかぶるときだけ気をつけてdpすればOK。 #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int n,S,T; int A[3010],B[3010]; int dp[3010][3010]; int rec(int store,int time){ if(store==n) return 0; else if(dp[store][time]!=-1) return dp</algorithm></string.h></stdio.h>…

JOI2012本選2番

dp[ap=Aの何枚目か][bp=Bの何枚目か]でDPした。 #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int dp[5010][5010]; int ac[5010],bc[5010]; int rec(int ap,int bp){ if(ap<0||bp<0) return 0; else if(dp[ap][bp]!=-1) return dp[ap][bp]; else{ in</algorithm></string.h></stdio.h>…

JOI2012本選1番

解説を聞いてから自分のやっていたことがRunLength圧縮と同じであると気づいた。 #include <stdio.h> #include <vector> using namespace std; char in[10000000+10]; int main(){ scanf("%s",in); vector<int> ch,sq; int c=in[0],s=1; for(int i=1;in[i]!=0&&in[i]!='\n';i++){ i</int></vector></stdio.h>…

JOI2012本選まとめ

↑の大会に参加してきました。 実力を限界まで発揮できたと思います。 合宿は問題を楽しむだけにしようと思います。