夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

←タグがいっぱい

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^)