やがみあん雑記

はろー。元気ですか

パソコン甲子園2015競技部門予選に参加しました

やがみあんです。今日から合宿も始まって本格的ながっこうぐらし!開始です。

パソコン甲子園(PCK)競技部門。今年で最後の参加になります。 去年と同じく彼女と参加しました。 そういや去年の記事をふと見たんですけど、

iorin-kyosama.hatenablog.com

何かが物足りないんですよね。 てことで、今回はソースコード晒します。 笑ってください。特に自分が書いたやつ。頭回ってないの丸分かりだから。

1問目

//やるだけ.みなみゅんが書いてくれたよ
#include <stdio.h>
int main(void)
{
    int p, m, c;
    
    scanf("%d %d %d", &p, &m, &c);
    
    printf("%d\n", p + m + c);
    
    return (0);
}

語ることは特に無い。

2問目

//やるだけ.二人で書いためう
#include <stdio.h>
int main(void)
{
    int a, b, c, d;
    int h1, h2, k1, k2;
    int H = 0, K = 0;
    
    scanf("%d %d", &h1, &h2);
    scanf("%d %d", &k1, &k2);
    scanf("%d %d %d %d", &a, &b, &c, &d);
    
    H = h1 * a + h2 * b + (h1/10) * c + (h2/20) * d;
    K = k1 * a + k2 * b + (k1/10) * c + (k2/20) * d;
    
    
    if (H == K){
        printf("even\n");
    }
    else if (H > K){
        printf("hiroshi\n");
    }
    else {
        printf("kenjiro\n");
    }
    return (0);
}

半分こして書いた気がする。

3問目

//あんまりスマートじゃないね.拙作.
#include <stdio.h>
int main(void)
{
    int D, L;
    int sum = 0;
    
    scanf("%d %d", &D, &L);
    
    while(D != 0){
        
        if (D - L < 0){
            sum += D;
            D = 0;
        }
        
        else{
            D -= L;
            sum++;
        }
    }
    
    printf("%d\n", sum);
    
    return (0);
}

while使うまででもなかったような。

4問目

//頭が回ってなかった証拠.拙作.
#include <stdio.h>
int main(void)
{
    int N;
    int X, Y, Z;
    int a[128];
    int b[128];
    int c[128];
    int af[128];
    int bf[128];
    int cf[128];
    int i;
    int sum = 0;
    
    scanf("%d", &N);
    
    scanf("%d", &X);
    for (i = 0; i < X; i++){
        scanf("%d", &a[i]);
    }
    
    scanf("%d", &Y);
    for (i = 0; i < Y; i++){
        scanf("%d", &b[i]);
    }
    
    scanf("%d", &Z);
    for (i = 0; i < Z; i++){
        scanf("%d", &c[i]);
    }
    
    for (i = 0; i < N; i++){
        af[i] = 0;
        bf[i] = 0;
        cf[i] = 0;
    }
    
    for (i = 0; i < X; i++){
        af[a[i]- 1] = 1;
    }
    for (i = 0; i < Y; i++){
        bf[b[i] - 1] = 1;
    }
    for (i = 0; i < Z; i++){
        cf[c[i] - 1] = 1;
    }
    
    for (i = 0; i < N; i++){
        if (bf[i] == 1 && cf[i] == 1){
            sum++;
        }
    }
    //間違えそうだったから念のため分けた
    for (i = 0; i < N; i++){
        if (cf[i] == 1 && af[i] == 0 && bf[i] == 0){
            sum++;
        }
    }
    
    printf("%d\n", sum);
    
    return (0);
}

自分でもひどいと思った。笑ってた。

5問目

//合作.楽しようと思ったら1ミスした
#include <stdio.h>

int p[128];
int pf[128];

int main(void)
{
    int n;
    int ans;
    int a;
    
    int i, j;
    
    scanf("%d", &n);
    for (i = 0; i < n; i++){
        scanf("%d", &p[i]);
    }
    
    for (i = 0; i < n; i++){
        for (j = 1; j <= 100; j++){
            if(p[i] >= j){
                pf[j] += 1;
            }
        }
    }
    
    a = 0;
    ans = 0;
    for (i = 1; i <= 100; i++){
        if (pf[i] >= i){
            ans = i;
            if (ans > a){
                a = ans;
            }
            else if (ans <= a){
                ans = a;
            }//この比較いらなかった?
        }
    }
    printf("%d\n", ans);
    
    
    return (0);
}

最初「n点以上の正解がn個以上ある」状態が成り立たなくなったらその時点で抜けてたんですけどそれで通らなかった。(ソースコード残ってない)
安易に楽しようとしちゃダメだね(´・ω・`)

まとめ

今年は5問解けました。
目標達成復讐完了。
残りの問題に関しては、外でお菓子を食べながらのほほんの6~7問目について考えていました。

今後、競技プログラミングに触れる機会は少なくとも減っちゃうんだろうなあ。
私自身、競技はあまり得意ではありません。
だけどペアプログラミングはとっても楽しいから大好きです。
二人で一緒に考えて、ACしたらハイタッチ。
自分が分からなかったら、バトンタッチ。
相手が考え込んでたら、キーボード強奪。
そして詰まった時は一呼吸入れて休憩。
相手との会話を絶やさず、常におしゃべりをしながらのプログラミングはいつもと違って新鮮で何とも言えない充実感に満たされていました。
もしまたやる機会があったら、嬉しいだろうなあ。

相方の今回の差し入れはパイでした。おいしかったです。
共に苦楽を分かち合いわいわいと問題を解くことができた。 2年間、彼女と組めたことは私にとってこの上ない幸せであり素晴らしい体験でした。
ありがとう。