おはやし日記

テーマ……バイク←プログラミング←旅

ABC164【A, B完】

ABC164でした。

atcoder.jp

今回はダメだった。

生活リズムガバガバすぎて18時頃にはクソ眠かった

20:40にアラームかけて寝落ちしたけど起きるのに時間かかったりしたので30分ほど遅刻してスタート

A

atcoder.jp

提出

AC Submission #12371389 - AtCoder Beginner Contest 164

#include <stdio.h>

int main(){
    int S, W;
    scanf("%d%d", &S, &W);
    printf("%s\n", (S>W)?"safe":"unsafe");
    return 0;
}

三項演算子を使った。かっこいい(?)。

B

atcoder.jp

提出

AC Submission #12373798 - AtCoder Beginner Contest 164

#include <stdio.h>

int main(){
    int A,B,C,D;
    scanf("%d%d%d%d",&A,&B,&C,&D);
    while(1){
        C -= B;
        if(C<=0){
            printf("Yes\n");
            return 0;
        }
        A -= D;
        if(A<=0){
            printf("No\n");
            return 0;
        }
    }
    return 0;
}

素直なコード(?)。

C

提出

WA Submission #12381623 - AtCoder Beginner Contest 164

う〜〜〜ん、何が悪いんかわからん。入力例のは通ったし考え的には合ってると思うのだが……

てかテストケースも最後の二つ以外通ってるしなぁ…………

ここでやる気が尽き、D問題もぱっと見手に負えないので断念。

さいなら。

セットが使えればよかったんだけどCはない(はず)だしな…………

解説(https://img.atcoder.jp/abc164/editorial.pdf)でも

文字列を辞書順などでソートしてから重複を確認したり

とあるので悪い方針ではなかったのだが

反省

他の人の解答Submission #12399739 - AtCoder Beginner Contest 164が役に立ちそうだ

何が違うかと言うと、比較関数のところだ

自分は、qsortの比較関数を知った時にやってたint用の処理をそのまま書いてしまっていた。多分これが何か悪さをしていたのだ

int compar(const int *val1, const int *val2) {
    if ( *val1 < *val2 ) {
        return -1;
    } else if ( *val1 == * val2 ) {
        return 0;
    } else {
        return 1;
    }
}

......

qsort(S, N, sizeof(char)*20,
    (int (*)(const void *, const void *))compar
);

今回は「文字列」を比較するので比較関数を書き直さなければいけない

  • 再提出

AC https://atcoder.jp/contests/abc164/submissions/12400852

な〜〜〜〜〜るほど完全に理解した(怪しい)。

int compar(const char *a, const char *b){
    return strcmp(a, b);
}

......

qsort(S, N, sizeof(char)*20,compar);

qsortに関数をぶち込む時名前だけ書けば良いことも知った。

ただ、なんか調べるに、比較関数の引数はconst void*にしておいて比較関数の中でキャストすべきらしい。

そこんところちょっと確認しておこう。

おしまい。

プライバシーポリシー ・お問い合わせはこちら