ABC164でした。
今回はダメだった。
生活リズムガバガバすぎて18時頃にはクソ眠かった
20:40にアラームかけて寝落ちしたけど起きるのに時間かかったりしたので30分ほど遅刻してスタート
A
提出
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
提出
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*
にしておいて比較関数の中でキャストすべきらしい。
- 【C言語】qsort関数 – ソート関数による並び替え | MaryCore https://marycore.jp/prog/c-lang/c-function-qsort/
そこんところちょっと確認しておこう。
おしまい。