夢追い人

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

精進ができない

そのまんま

0517

#include <cstdio>
#include <algorithm>
using namespace std;
int n, k;
int card[100000];
int main() {
    while (scanf("%d%d",&n,&k)) {
        if (!n&&!k) break;
        for (int i=0; i<k; i++) scanf("%d",&card[i]);
        sort(card, card+k);
        int res=0, cnt=1;
        if (card[0]) {
            for (int i=1; i<k; i++) {
                if (card[i]-card[i-1]==1) cnt++;
                else {
                    res=max(res,cnt);
                    cnt=1;
                }
            }
            printf("%d\n",max(res,cnt));
        } else {
            int flag=1, pos=0;
            for (int i=2; i<k; i++) {
                if (card[i]-card[i-1]==1) {
                    cnt++;
                } else if (flag&&card[i]-card[i-1]==2) {
                    pos=i; flag=0;
                    cnt+=2;
                } else if (card[i]-card[i-1]==2) {
                    res=max(res,cnt);
                    cnt=1; i=pos; flag=1;
                } else {
                    res=max(res,cnt);
                    cnt=1; flag=1;
                }
            }
            printf("%d\n",max(res,cnt));
        }
    }
}

0110

左端に0がくることはないと書いときながら左端のXに0を代入しなければならないケースがあるそうです。

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
string num[3], num2[3];
bool add(string a, string b, string res) {
    //if (a[0]=='0'||b[0]=='0'||res[0]=='0') return false;
    string ret="";
    int as=a.size(),bs=b.size();
    int c=0;
    for (int i=0; i<max(as,bs); i++) {
        int t=c;
        if (i<as) t+=a[as-i-1]-'0';
        if (i<bs) t+=b[bs-i-1]-'0';
        c=t/10;
        t%=10;
        ret+=t+'0';
    }
    if (c) ret+='1';
    reverse(ret.begin(), ret.end());
    return ret==res;
}
int main() {
    string alpha;
    while (cin>>alpha) {
        num[0]=""; num[1]=""; num[2]="";
        int pos=0;
        for (int i=0; i<alpha.length(); i++) {
            if (alpha[i]=='+'||alpha[i]=='=') {
                pos++;
            } else {
                num[pos]+=alpha[i];
            }
        }
        int res=-1;
        for (int i=0; i<=9; i++) {
            num2[0]=num[0]; num2[1]=num[1]; num2[2]=num[2];
            for (int j=0; j<3; j++) {
                for (int k=0; k<num2[j].length(); k++) {
                    if (num2[j][k]=='X') num2[j][k]=(i+'0');
                }
            }
            if (add(num2[0],num2[1],num2[2])) {
                res=i;
            }
        }
        if (res==-1) puts("NA");
        else printf("%d\n",res);
    }
}

0107

今日数学的な判定方法思いついて枠組みに当てはめました。

#include <cstdio>
#include <algorithm>
using namespace std;
bool ok(int a, int b, int c) {
    if (a*a+b*b<c*c) return true;
    else return false;
}
int main() 
{
    int row,col,high;
    int n;
    int dir;
    while (scanf("%d%d%d",&row,&col,&high)) {
        if (row==0&&col==0&&high==0) break;
        scanf("%d",&n);
        for (int i=0; i<n; i++) {
            scanf("%d",&dir);
            dir*=2;
            if (ok(row,col,dir)||ok(row,high,dir)||ok(col,high,dir)) {
                printf("OK\n");
            }
            else {
                printf("NA\n");
            }
        }
    }
}

0124

入力順ってのがかなり工夫必要

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int main() {
    int n, f=0;
    while (cin>>n) {
        if (!n) break;
        if (f) cout<<endl;
        else f=1;
        vector<int> m;
        map<int, vector<string> > f;
        for (int i=0; i<n; i++) {
            string name; cin>>name;
            int a,b,c; cin>>a>>b>>c;
            int p=-(a*3+c);
            if (count(m.begin(), m.end(), p)==0) m.push_back(p);
            f[p].push_back(name);
        }
        sort(m.begin(),m.end());
        for (int i=0; i<m.size(); i++) {
            for (int j=0; j<f[m[i]].size(); j++) {
                cout<<f[m[i]][j]<<","<<-m[i]<<endl;
            }
        }
    }
}