CROCから話しますね
A
えーとなんだっけ。やるだけだけどw
#include <iostream> #include <cstdio> using namespace std; string str[30000]; int main() { int n; scanf("%d",&n); for (int i=0; i<n; i++) cin>>str[i]; int res, len=str[0].length(); for (res=0; res<len; res++) { bool flag=true; char c=str[0][res]; for (int i=1; i<n; i++) { if (c!=str[i][res]) { flag=false; break; } } if (!flag) break; } printf("%d\n",res); }
B
set駆使するだけ
#include <cstdio> #include <set> using namespace std; set<int> used; int r[200000]; int main() { int a, b, m, r0; scanf("%d%d%d%d",&a,&b,&m,&r0); r[0]=r0; used.insert(r0); int f=-1; for (int i=1; i<m*2; i++) { r[i]=(a*r[i-1]+b)%m; if (used.find(r[i])!=used.end()) { f=r[i]; break; } used.insert(r[i]); } if (f==-1) { puts("0"); return 0; } int res=0; bool flag=false; for (int i=0; i<m*2; i++) { if (!flag&&r[i]==f) { flag=true; } else if (flag&&r[i]==f) { break; } if (flag) res++; } printf("%d\n",res); }
euler 18
dp典型〜
#! /usr/bin/env python # -*- coding:utf-8 -*- mp=[ [ 0,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0,95,64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0,17,47,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0,18,35,87,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0,20, 4,82,47,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0,19, 1,23,75, 3,34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0,88, 2,77,73, 7,63,67, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0,99,65, 4,28, 6,16,70,92, 0, 0, 0, 0, 0, 0, 0, 0], [ 0,41,41,26,56,83,40,80,70,33, 0, 0, 0, 0, 0, 0, 0], [ 0,41,48,72,33,47,32,37,16,94,29, 0, 0, 0, 0, 0, 0], [ 0,53,71,44,65,25,43,91,52,97,51,14, 0, 0, 0, 0, 0], [ 0,70,11,33,28,77,73,17,78,39,68,17,57, 0, 0, 0, 0], [ 0,91,71,52,38,17,14,91,43,58,50,27,29,48, 0, 0, 0], [ 0,63,66, 4,68,89,53,67,30,73,16,69,87,40,31, 0, 0], [ 0, 4,62,98,27,23, 9,70,98,73,93,38,53,60, 4,23, 0] ] dp=[] def init(): for i in range(15): dp.append(range(17)) for i in range(17): dp[0][i]=mp[0][i] for i in range(1,15): for j in range(17): dp[i][j]=0 def main(): init() for i in range(1,15): for j in range(1,16): dp[i][j]=mp[i][j]+max(dp[i-1][j-1],dp[i-1][j]) res=0 for i in range(17): res=max(res,dp[14][i]) print res if __name__=='__main__': main()
euler 20
多倍長力〜
#! /usr/bin/env python # -*- coding:utf-8 -*- def main(): n=1L for i in range(2,101): n*=i s=str(n) res=0 for i in range(len(s)): res+=int(s[i]) print res if __name__=='__main__': main()
pku 3400
やるだけ
#include <cstdio> #include <map> #include <algorithm> #define f first #define s second using namespace std; typedef pair<int, int> P; int p[10]; P st[10]; int main() { int n, d; scanf("%d%d",&n,&d); for (int i=0; i<n; i++) { int px, v; scanf("%d%d",&px,&v); st[i]=P(px,v); p[i]=i; } int res=0; do { bool flag=false; int a=0, b=0, r=0; for (int i=0; i<n; i++) { int x=p[i]; if (flag) { if (b-d>a) { flag=false; a+=st[x].f; } else { b+=st[x].f; r+=st[x].s; } } else { if (a-d>b) { flag=true; b+=st[x].f; r+=st[x].s; } else { a+=st[x].f; } } } res=max(res,r); } while (next_permutation(p,p+n)); printf("%d\n",res); }
まとめ
最近やるだけばっかりに見えると思われて仕方がないことしてますが、一応Codechefでそれなりの問題は解いてますよ!
終わってからのお楽しみね(笑)
とりあえず明日のSRM本気だすから(^O^)