プログラミングを上達させたい

プログラミングの勉強を始めた、情報学専攻の大学院生です。モチベーション維持のため、ブログに勉強したことを書いていきます。→就職。IT全然関係ない仕事をしています

ATCODERのBiginner Contestの過去問

まだやる気が残ってるうちに、さっそくATCODERのサイトの過去問を解いてみようと思います。

まず、Bignner Contestという、初心者でもなんとかなりそうな難易度のものから。

なんとなく、Bignner Contestの#005からやっていくことにしました。

A問題は簡単なので、B問題から。

しかし、初めてこれ関係の記事を書くので、やっていく手順とかその辺りはなるべく詳しく書いていこうと思います。

 

さて、B問題です。B問題はこちら↓

http://abc005.contest.atcoder.jp/tasks/abc005_2

 

とりあえず、Javaで解いてみました。

以下がそのコードです。

 

gist10821908

 

注意点?として、クラス名をMainにしなければならない、とのこと。

よく分からないけど、とりあえずそれに従う。

提出前に、まずは手元の環境で合ってるか簡単なチェック。

 

ATCODERの本番のコンテストでは、間違ったコードを提出するとペナルティがつくので、確認は非常に大事です。

上のコードをこれをMain.javaとして保存し、ターミナルでそこのフォルダまで行き、以下のコマンドでコンパイル、そして問題ページの一つ目の入力例を入れてみる。

****************

$ javac -J-Dfile.encoding=UTF8 Main.java

$ java Main

3

1

2

3

 

1

***************

こう書くと分かりにくいですが、

3

1

2

3

ってのは僕が入力しました。最後の 1 はプログラムの返答です。

そしてこれを、提出してみました。

ATCODERの提出ページから、問題B、Java、そしてコードをコピペ。

ドキドキしながら評価を待って・・・

ACとなりました。Accept、受理ですね。よかったよかった。

 

そして、他の人がやっているのを見たので、少し短いバージョンも書いてみました。

gist10822118

入力をリストに入れていくのをやめて、スキャンしたら見る、って感じですね。

これもACとなりました。

コードは短くなりましたが、判定を見てみると結果として時間がかかるようになってました。理由は知りません。

 

また、やってみたいと思っていたC++でも書いてみました。

大分Javaと似ているので、簡単に書けました。

gist10821990

 

では、こちらも確認を。

ABC005B.cppという名前で上のC++のコードを保存し、ターミナルでそのファイルがあるフォルダに移動、そして以下のようにしてコンパイル、および確認作業をしました。

確認に使った入力は上と同じです。

********************

$ gcc -o main ABC005B.cpp 

$ ./main

3

1

2

3

 

1

*************

上と同じく、最後の 1 以外の数字は自分で打ち込んでおります。

 

他の入力例で試してみてもOKだったので、提出ページに行き、言語のところをC++に変更して提出。

無事ACとなりまして・・・実行時間が37ms!

Javaの方は528msだったので・・・

速いとは聞いていましたが、まさかここまでとは・・・。

恐るべしですね。そりゃ使う人多いわ。

これの制限時間が2sec(=2000ms)なので、もう少しややこしい問題だと(僕の実力では)C++で書くと時間内にいけるけどJavaで書くと制限時間オーバー、ってこともありそう・・・

 これからの練習はC++でやっていった方がよさそうですね。

 

 

では、今回はここまでで。継続して頑張れますように。

広告を非表示にする