夢追い人

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

春合宿erお疲れ様でした〜

鬼畜問ばっかで色々とTwitterでは檻の外のJOIerが闇の軍団と化してたらしいですね

AOJ 2204

やるだけ

#include <cstdio>
#include <climits>
#include <algorithm>
#define inf INT_MAX/2;
using namespace std;
int main() {
    int n;
    while (scanf("%d",&n)) {
        if (!n) break;
        int M=0, m=inf;
        for (int i=0; i<n; i++) {
            int sum=0;
            for (int j=0; j<5; j++) {
                int s; scanf("%d",&s);
                sum+=s;
            }
            M=max(M,sum);
            m=min(m,sum);
        }
        printf("%d %d\n",M,m);
    }
}

LoveCalculator

やるだけ

class LoveCalculator {
public:
    void count(int *cnt, string name) {
        fill(cnt, cnt+4, 0);
        for (int i=0; i<name.length(); i++) {
            if (name[i]=='L') cnt[0]++;
            if (name[i]=='O') cnt[1]++;
            if (name[i]=='V') cnt[2]++;
            if (name[i]=='E') cnt[3]++;
        }
    }
    string findBoy( string girl, vector <string> boys ) {
        int cnt[4];
        count(cnt, girl);
        int mp=-1;
        string res="";
        sort(boys.begin(), boys.end());
        for (int i=0; i<boys.size(); i++) {
            int temp[4];
            count(temp, boys[i]);
            for (int j=0; j<4; j++) temp[j]+=cnt[j];
            int r=((temp[0]+temp[1])*(temp[0]+temp[2])*(temp[0]+temp[3])*(temp[1]+temp[2])*(temp[1]+temp[3])*(temp[2]+temp[3]))%100;
            if (mp<r) {
                mp=r;
                res=boys[i];
            }
        }
        return res;
    }
};

DesignCalculator

問題文が・・・

class DesignCalendar {
public:
    int gcd(int a, int b) {
        return b?gcd(b,a%b):a;
    }
    int shortestPeriod( int dayLength, int yearLength ) {
        return dayLength/gcd(dayLength, yearLength);
    }
};

Teaching

全列挙が間に合うとは思わなかった

class Teaching {
public:
    int count( vector <string> words, int K ) {
        if (K<5) return 0;
        int sz=words.size();
        int cnt[sz];
        memset(cnt, 0, sizeof(cnt));
        for (int i=0; i<sz; i++) {
            int len=words[i].length();
            for (int j=0; j<len; j++) {
                cnt[i]|=(1<<(words[i][j]-'a'));
            }
        }
        int res=0;
        for (int i=0; i < 1<<26 ; i++) {
            if (!(i&(1<<('a'-'a')))) continue;
            if (!(i&(1<<('c'-'a')))) continue;
            if (!(i&(1<<('i'-'a')))) continue;
            if (!(i&(1<<('n'-'a')))) continue;
            if (!(i&(1<<('t'-'a')))) continue;
            int c=0;
            if (__builtin_popcount(i)==K) {
                for (int j=0; j<sz; j++) {
                    if ((i&cnt[j])==cnt[j]) c++;
                }
                res=max(res, c);
            }
        }
        return res;
    }
};

AOJ 2101

やるだけ

#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
int main() {
    int n;
    while (scanf("%d",&n)) {
        if (!n) break;
        ll sum=1;
        if (n==1) {
            puts("deficient number");
            continue;
        }
        for (int i=2; i*i<=n; i++) {
            if (n%i==0) {
                if (i!=n/i) sum+=n/i+i;
                else sum+=i;
            }
        }
        if (sum>n) puts("abundant number");
        else if (sum<n) puts("deficient number");
        else puts("perfect number");
    }
}

AOJ 2281

やるだけ

#include <cstdio>
#include <iostream>
using namespace std;
int a[101], b[101];
int main() {
    int n;
    while (scanf("%d",&n)) {
        if (!n) break;
        string str; cin>>str;
        for (int i=0; i<n; i++) {
            scanf("%d%d",&a[i],&b[i]);
            a[i]--; b[i]--;
        }
        for (int i=n-1; i>=0; i--) {
            int diff=(b[i]-a[i])%26;
            char c1, c2;
            if (str[a[i]]+diff>'z') c1=str[a[i]]+diff-26;
            else c1=str[a[i]]+diff;
            if (str[b[i]]+diff>'z') c2=str[b[i]]+diff-26;
            else c2=str[b[i]]+diff;
            str[a[i]]=c2; str[b[i]]=c1;
        }
        cout<<str<<endl;
    }
}

2273

戦略ゲーこわい

#include <cstdio>
#include <iostream>
#include <set>
using namespace std;
string play="aaaaaaaaaa", str;
int main() {
    set<string> used;
    int i=0;
    while (true) {
        bool end=false;
        for (int j=1; j<8; j++) {
            for (int k=0; k<26; k++) {
                play[j]='a'+k;
                if (used.find(play)==used.end()) {
                    cout<<"?"<<play<<endl;
                    fflush(stdout);
                    used.insert(play);
                    cin>>str;
                    if (used.find(str)!=used.end()||str[0]!='a') {
                        end=true;
                        break;
                    }
                    used.insert(str);
                    play[0]=str[str.length()-1];
                }
            }
            if (end) break;
        }
        if (end) {
            puts("!OUT");
            break;
        }
    }
}

AOJ 2272

やるだけ

#include <cstdio>
#include <iostream>
#include <climits>
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
#include <functional>
#define inf INT_MAX/2
using namespace std;
typedef pair<int, int> P;
struct edge { int to, cost; };
int h, w;
vector<edge> G[2500];
int d[2500];
string field[50];
int dijkstra() {
    fill(d, d+2500, inf);
    d[0]=0;
    priority_queue<P, vector<P>, greater<P> > que;
    que.push(P(0,0));
    while (!que.empty()) {
        P p=que.top(); que.pop();
        int v=p.second;
        if (d[v]<p.first) continue;
        for (int i=0; i<G[v].size(); i++) {
            edge e=G[v][i];
            if (d[e.to]>d[v]+e.cost) {
                d[e.to]=d[v]+e.cost;
                que.push(P(d[e.to],e.to));
            }
        }
    }
    return d[h*w-1];
}
int main() {
    scanf("%d%d",&h,&w);
    for (int i=0; i<h; i++) {
            cin>>field[i];
    }
    for (int i=0; i<h; i++) {
        for (int j=0; j<w; j++) {
            if (i!=h-1) {
                G[i*w+j].push_back((edge){(i+1)*w+j,field[i+1][j]-'0'});
            }
            if (j!=w-1) {
                G[i*w+j].push_back((edge){i*w+j+1,field[i][j+1]-'0'});
            }
        }
    }
    printf("%d\n",dijkstra());
}

まとめ

LCAとフローと強連結成分分解とSegTreeとBITと(ryが扱えるようにならなければならない