AtCoder Beginner Contest#004に参加しました。
僕にとっての初めてのプログラミングコンテストでした。
「beginner contestというくらいだから、自分でも解けるだろう~」と楽観的な気持ちで臨んだのですが、見事に打ち砕かれました。
4問中完全にできたのは最初の3問のみでした。最後の問題は途中点だけ何とか貰う形に、、
とりあえず問題のリンクと僕の書いたコードを置いていこうと思います。
言語はCで書きました。競技プログラミングでCを使う人は少ないのかな?しかし僕はCとjavaしか書ける言語がない(しかもjavaはほとんど忘れている)、というにわかプログラミング学習者のテンプレのような男なのでCで書きました。
まず1問目
A: 流行 - AtCoder Beginner Contest #004 | AtCoder
これは多分誰でもできるんじゃないかな?コードは省きます。数値を一つ入力してそれを2倍して返してあげるだけです。
次に2問目
B: 回転 - AtCoder Beginner Contest #004 | AtCoder
これは空白挟んだ4×4の文字列を上下反転させて出力させるという問題です。以外にこの問題に苦戦してしまった私がいます。scanf分かりづらいんじゃ
コードはこんな感じになりました。scanfが未だによく分かっていない私。
最初はscanfの中に改行コードを入れていなかったのですが、それだと上手くいかなかったため改行を入れてみたところACが出たので結果オーライということで。
putやらgetやらで書いた方が簡単なのかな。
#include <stdio.h>
int main(void){
char s[4][4];
int i,j;
for(i=0; i<4; i++){
scanf("%c %c %c %c\n", &s[i][0], &s[i][1], &s[i][2], &s[i][3]);
}
for(i=3; i>=0; i--){
printf("%c %c %c %c\n", s[i][3], s[i][2], s[i][1], s[i][0]);
}
return 0;
}
次は3問目
C: 入れ替え - AtCoder Beginner Contest #004 | AtCoder
ここから少しだけ難しくなります。というよりこれは問題の意図に気が付けるか、というところですね。
あることに気が付かないと処理が間に合わずTA(タイムアップ)になってしまいます。
私はもれなく引っかかりました。実際少し考えれば分かることなのですが、本番だとテンパッてしまいますね。最終的に提出してACを貰ったコードを下に貼ります。にしても汚いコードだな。。
#include <stdio.h>
int main(void){
int num[6]={1,2,3,4,5,6};
int n, i, j, temp, wa, mod;
scanf("%d", &n);
n = n%30;
wa = n/5;
mod= n%5;
for(i=0; i<wa; i++){
for(j=0; j<5; j++){
temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
for(i=0; i<mod; i++){
temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
}
for(i=0; i<6; i++){
printf("%d", num[i]);
}
printf("\n");
return 0;
}
4問目
D: マーブル - AtCoder Beginner Contest #004 | AtCoder
僕はこいつにやられました。初心者には難しすぎるよ。。。ちなみに未だに解けていません。解き次第、ここに報告する形にします。
全探索を使うのかな?もう少し慣れてから挑戦します。
と、僕の初めてのプログラミングコンテストはこんな感じで終わりました。順位は137位でした。まぁこんなもんだよな。。
結果はあまり良いものではありませんでしたが、とても楽しかった!!
これを機にプログラミングともう少し向き合おうと思えたので良かったと思います。(仮にも一応情報系なのでorz)
では今日はこれくらいで。