2012-02-01から1ヶ月間の記事一覧
#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>…
Brainfuckとは http://ja.wikipedia.org/wiki/Brainfuck プログラムの動かし方 runghc Brainfuck.hs Brainfuckのソースコード] 課題 '.' ポインタが指す値を出力に書き出す。C言語の「putchar(*ptr);」に相当。 IOモナドを使いたくない(使えない)のでマシン…
nkf -Lu -overwrite TEST.txt とやるとファイル中のCRLFが全てLFになって便利だった。
解法 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>…
問題文要約 記号を含む文字列が与えられるので、記号を除いて小文字を大文字に変換した後その文字列が含む回文を列挙せよ。ただしcXcとなる回文が存在した場合Xを出力してはならない。 解法 dp[i][j]=(i文字目からj文字目までが回文となっているかどうか) で…
解法 最後の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>…
ダイクストラして最大全域木求めて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>…
講義資料 - いもす研 (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>
時間が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>…
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>…
解説を聞いてから自分のやっていたことが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>…
↑の大会に参加してきました。 実力を限界まで発揮できたと思います。 合宿は問題を楽しむだけにしようと思います。