夢追い人

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

April Fools Contestとはwww

四完。凡人な感じ。
C-Intercalって言語を平気で書いてる人がいて怖かった(・_・;)

AOJ 0229

#include <cstdio>
int main() {
    int b,r,g,c,s,t;
    while (scanf("%d%d%d%d%d%d",&b,&r,&g,&c,&s,&t)) {
        if (!b&&!r&&!g&&!c&&!s&&!t) break;
        int res=100+12*(b+r)+13*(b*5+r*3)-c+4*g;
        t-=b*6+r*4+c+g+s;
        printf("%d\n",res-t*3);
    }
}

AOJ 0228

#include <cstdio>
#include <iostream>
using namespace std;
string sig[11]={
"0111111",
"0000110",
"1011011",
"1001111",
"1100110",
"1101101",
"1111101",
"0100111",
"1111111",
"1101111"
};
string now;
int main() {
    int n;
    while (scanf("%d",&n)) {
        if (n==-1) break;
        now="0000000";
        for (int i=0; i<n; i++) {
            int s; scanf("%d",&s);
            string res="";
            for (int j=0; j<7; j++) {
                if (now[j]==sig[s][j]) res+='0';
                else res+='1';
            }
            cout<<res<<endl;
            now=sig[s];
        }
    }
}

AOJ 0068

#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
double EPS=1e-10;
double add(double a, double b) {
    if (abs(a+b)<EPS*(abs(a)+abs(b))) return 0;
    return a+b;
}
struct P {
    double x, y;
    P() {}
    P(double x, double y) : x(x), y(y) {}
    P operator - (P p) {
        return P(add(x,-p.x),add(y,-p.y));
    }
    double dot(P p) {
        return add(x*p.x,y*p.y);
    }
    double det(P p) {
        return add(x*p.y,-y*p.x);
    }
};
bool comp(const P& p, const P& q) {
    if (p.x!=q.x) return p.x<q.x;
    return p.y<q.y;
}
vector<P> grahamscan(P* ps, int n) {
    sort(ps, ps+n, comp);
    int k=0;
    vector<P> qs(n*2);
    for (int i=0; i<n; i++) {
        while (k>1&&(qs[k-1]-qs[k-2]).det(ps[i]-qs[k-1])<=0) k--;
        qs[k++]=ps[i];
    }
    for (int i=n-2, t=k; i>=0; i--) {
        while (k>t&&(qs[k-1]-qs[k-2]).det(ps[i]-qs[k-1])<=0) k--;
        qs[k++]=ps[i];
    }
    qs.resize(k-1);
    return qs;
}
P ps[100];
int main() {
    int n;
    while (scanf("%d",&n)) {
        if (!n) break;
        for (int i=0; i<n; i++) {
            double x, y; scanf("%lf%*c%lf",&x,&y);
            ps[i]=P(x,y);
        }
        vector<P> qs=grahamscan(ps,n);
        printf("%d\n",n-qs.size());
    }
}

AOJ 0166

#include <cstdio>
#include <cmath>
#include <algorithm>
#define eps 1e-10
#define pi 3.14159265358979
using namespace std;
int main() {
    int m, n;
    while (scanf("%d",&m)) {
        if (m==0) break;
        double a=0.0, b=0.0;
        double arg=360.0;
        for (int i=0; i<m-1; i++) {
            int v; scanf("%d",&v);
            a+=sin((double)v/180.0*pi);
            arg-=v;
        }
        a+=sin(arg/180.0*pi);
        arg=360.0;
        scanf("%d",&n);
        for (int i=0; i<n-1; i++) {
            int v; scanf("%d",&v);
            b+=sin((double)v/180.0*pi);
            arg-=v;
        }
        b+=sin(arg/180.0*pi);
        if (abs(a-b)<eps) puts("0");
        else if (a-eps>b) puts("1");
        else puts("2");
    }
}

Codeforces April Fools Contest

さぁ本題です。
究極に面白いコンテストでした。

A

問題文がない!
さぁサンプルから探そう!!!
・・・どれどれ・・・
あ、二個目の数字ひっくり返して足してる!!!!!
書こう

#include <iostream>
#include <algorithm>
#include <sstream>
using namespace std;
typedef long long ll;
string a, b;
int main() {
    cin>>a>>b;
    reverse(b.begin(), b.end());
    ll rea, reb;
    stringstream sa; sa<<a; sa>>rea;
    stringstream sb; sb<<b; sb>>reb;
    cout<<rea+reb<<endl;
}

一発AC!次〜

B

次は何やら画像から推測するそう・・・
まぁ問題はすぐわかったので解き方解き方・・・
真ん中を除いて内側から数えた時i番目ではi*2*6個増えていることを発見する!!!
書く〜

#include <cstdio>
#define MAX_A 18257
int res[MAX_A];
int main() {
    int a; scanf("%d",&a);
    res[0]=1;
    for (int i=1; i<a; i++) {
        res[i]=res[i-1]+i*2*6;
    }
    printf("%d\n",res[a-1]);
}

一発AC〜

D

なんかみんなこっち解いているので・・・
でもこれはなに?
なんとなくSystemTestとのHit&Blow(Blow無いけどw)っぽい・・・
とりあえずなんか規則性あるんだろっておもってn%3+1とかやる
WAat5
適当に3個ぐらいおくる
Hit&Blowの要領で正解がわかる
おくる
AC!!!
やたーーーー(この前にFを解いていました)

#include <cstdio>
int main() {
    int n; scanf("%d",&n);
    if (n==1) puts("2");
    if (n==2) puts("3");
    if (n==3) puts("1");
    if (n==4) puts("2");
    if (n==5) puts("1");
}

F

なんだこれ?シーザー暗号???
とりあえず総当たりでずらしてみる・・・
意味の通る問題文発見!!!
keyを表示するように改造してkeyを探る・・・
10だと判明!シーザー暗号を解くプログラムが完成したので全部の問題文をそこに通していく。
emirp・・・どうやら反転すると別の素数になる素数のn番目を答えるらしい・・・
でも10000以上まで求めるの・・・単純でできるの????
てかそもそもどこまでの素数調べればいいの??????
みんなが通しているので焦る・・・
蟻本みる
1000000までの素数が80000近くあることを知る。
とりあえず実装・・・・
個数見てみる→制約の上限と個数が一致・・・仕組まれていたのか・・・・

#include <cstdio>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
int d;
int isp[1000001];
vector<int> p;
vector<int> tb;
int main() {
    fill(isp,isp+1000000,1);
    isp[0]=isp[1]=0;
    for (int i=2; i<=1000000; i++) {
        if (isp[i]) {
            p.push_back(i);
            for (int j=2*i; j<=1000000; j+=i) isp[j]=0;
        }
    }
    for (int i=0; i<p.size(); i++) {
        stringstream ss; ss<<p[i]; string r=ss.str();
        reverse(r.begin(), r.end());
        if (r==ss.str()) continue;
        int x;
        stringstream s2; s2<<r; s2>>x;
        if (isp[x]) {
            tb.push_back(p[i]);
        }
    }
    scanf("%d",&d);
    printf("%d\n",tb[d-1]);
}

その後一発ACしたのであった・・・・

E

悩む・・・
何が言語なのか?
このエラーメッセージに意味はあるのか???
そんなときにツイッターである人が僕のFに関するつぶやきにまちがえてEのことを送ってくる
いわく
「コンパイルエラーでエラーメッセージぐぐったら言語はわかったけど標準出力が鬼畜」
とのこと
棚から牡丹餅、さっそくぐぐりまくる・・・・
DやFを通しながらようやくIdeoneのところで同じエラーメッセージを見つける!(Ideoneぱない)
言語は・・・Intercal・・・・あれ?さっきちらっと見てたな。。。まぁいいか、リファレンス、リファレンス・・・・
・・・あれ?Wikiぐらいしか資料が出てこない????
とりあえず開く・・・
Hello, Worldプログラム・・・なんじゃこれwwww
文字コードが何なのかさえわからない・・・これどこがl???
格闘しているうちにコンテストエンド

C,G,H

Cはよくわからん、Gは千里眼が必要、Hはまじめに検討してない

結果

わりとペナルティとかは抑えられたので203位でした。
これがレーテッドコンテストだったら非常に面白かったんですがねw
さすがにアルゴリズム以外の力が問われるコンテストでのレートはだめなんでしょうね・・・