pck2017予選個人的感想

PCKお疲れ様でした。

まず結果から、7完3WA。
多分、地域1位なので本選はいけそうとか甘えた考えを持っています。
3つぐらい反省しなきゃいけないところはあったんですが、自分なりの全力は出せたと思います。

反省

紙ライブラリの製作に手間取り学校到着が予選開始15分前になってしまったのが全ての始まりでした。

学校到着時だれもパスワードを把握しておらず、急遽事務局に問い合わせをしました。
すぐさま、担当の先生に対応していただき無事に予選をほぼ時間通り開始できました。


開始後すぐ後輩に投げて1から3問目を埋めてもらいました。
これは、後々考えると凄いいい選択でした。

開始、30分ほどで埋めてくれたのですが私はその間に6問目までの考察を終わらせることが出来ました。

そこから、4問目始点と終点でバグらせて手元でWA。
4、5問目をとき終えたころには開始から1時間たっていました。

そこから、6問目解いたのですがパンケーキの悪夢再び。

実装ミスで2WA。
1WA目は、ぴったり飛ばなきゃいけないものだと思い込んでいた。
2WAは、「現在飛べる距離+現在の位置のトランポリンの飛距離」にしていたのを「現在の位置+現在の位置のトランポリンの飛距離」にしなきゃいけないという凡ミスをやらかしました。

なんとか、30分かけてバグ取り。これにこんなに時間かけたのは一つ目の反省点。

7問目、見てすぐに2列分だけ状態を持ったDPだと分かり解けそうだと飛びつく。これが二つ目の反省点です。

まあ、かなりバグらせながら1時間かけてAC。途中集中力を失いメモ化するのを忘れて提出それによりいらない1WA。
これが3つ目の反省点。

そこから、残り20分になり8問目ぱっとみ解けそうにないのであきらめ。
順意表をながめおやつをたべながら雑談。
7AC3WAに甘んじました。

予選終了後

8いけたじゃんと気づき死にそうな気分に。
https://paiza.io/projects/WI9kkifTHiJPqzvPhZkY5Q

今後の改善点

1・ちゃんと問題文読め。きちんと例外ケースを考えろ。今回気づけたのは奇跡。次はないと思え。
2・解けそうな問題に飛びつくな。ちゃんと問題文一通り見ろ。
3・これ結果にかかわる、でかい!!集中力を失った結果いらない1WA。
番外・パスワード誰も知らないのは笑った。すぐさま対応してくれた事務局ありがとう。

おわりに

 休日出勤して監督くれた先生ありがとうございます。もう、3年目になりますね。私と先輩で始めた試みですが、芽は順調に育ち今後も後輩が続けてくれると思います。ぜひ、非情報系学校が、どこまでいけるか見届けてください。
 パスワードを忘れるという大ポカに対して、すぐさま対応してくれた事務局ありがとうございます。無事遅れることなく参加できました。
 一緒にでてくれた後輩、君がいなかったらそもそも出場できませんでした。しかも、今日のために1日1ACするとか言う苦行までして準備してくれてありがとう。いつも謙遜しているけど、確実に力になっていることは私が保障するのでこのまま頑張ればなんでも出来る。頑張れ。
 最後に、去年、一昨年一緒に出場してくれた先輩ありがとう。今でもいつでもお世話になってます。少しは、迷惑かけないようになろうと頑張ってますからもう少し待ってください。

 本当に最後に私にtwitterでかまってくださる皆さん本当にありがとうございます。私がここまでプログラミングできるようになったのは皆さんのおかげです。もし、本選で結果を残せたらあいつは俺が育てたとか言ってください。まだ、本選いけるかも分かりませんが本選でも全力を尽くします。

次は、高専プロコンです。
高専プロコンまで残り1ヶ月。

進捗やばいですが、

人力GUI誠心誠意製作中です。
人力勢、人力PC勢の本気を見せてやる。今年は、パズコンにはさせないからな!!!待ってろ。

AGC011個人的な反省

遅刻

理由は、これ


f:id:nasatame:20170313144309j:plain


これのせいで20分ほど遅刻して参加しました。

2問解けました。
今回のセットはレート1600位までは、2問早解きででそうだったのでとても残念です。

解説?

A問題

時間Tiに N 人の乗客が到着します.
乗客を待たせる時間をK以下にして、バスの定員がCのとき。
何台バスを出発させる必要がありますか?

という問題でした。

考察としては、バスの出発時間を最大限遅らせるためにはT[i] + Kにバスが出ることにすればいい、ということだけでした。
よって貪欲で解けました。

到着時間をソートした後。(入力はソートされていない)

  • バスには現在何人乗っている。
  • バスは何時に出る。
  • バスは何台出た。

という三つをもって貪欲しました。
新しいバスが必要になる条件は、定員オーバーと前のバスが出たという二つになります。
境界条件が分かりづらいので注意。
Submission #1157617 - AtCoder Grand Contest 011 | AtCoder

B問題

N匹生き物がいて、自分の体の2倍以下まで食べられます(食べた分だけ大きくなる)。最後まで残ることができるのはどのサイズの生き物まででしょうか?

という問題でした。

考察は、自分より小さい生き物は全員食べられる。
自分より小さい生き物を全員食べた上で食べられない生き物がいればそいつ以下の生き物は生き残ることができない。

つまり、生き物の大きさをすべて足していってその2倍よりも大きい生き物がいたらそこを記録するということをするだけです。

これも入力をソートする必要があります。

例3
40 1 30 2 7 20
ソート
1 2 7 20 30 40
足していくと
1 3 10 30 60 100
大きさ3の生き物は7の生き物をたべられないので、そこを記録します。
よってこれは、それよりも大きな4匹の生き物が残れるので答えは4になります。

Submission #1157909 - AtCoder Grand Contest 011 | AtCoder

プログラミング言語Kemonoをより書きやすく。

最近Twitterで、プログラミング言語フレンズ Kemonoという言語があるのを知った。
しかし、Brain f*ckよりタイプ数が多いため自然書きづらくなっている、どうしようか。
ということで書いてみた。

//Form Brain f*ck to Kemono
#include <iostream>
#include <string>
#include <map>
using namespace std;


int main(void){
    
    map<char,string> m;
    
    m['>'] = "たのしー!";
    m['+'] = "たーのしー!";
    m['<'] = "すごーい!";
    m['-'] = "すっごーい!";
    m['['] = "うわー!";
    m[']'] = "わーい! ";
    m['.'] = "なにこれなにこれ!";
    m[','] = "おもしろーい!";
    
    string s;
    cin >> s;
    
    for(int i = 0; i < s.size(); i++) cout << m[s[i]];
    cout << endl;
}

言うまでもないですが、BrainfuckからKemonoに変換するためのプログラムです。

作業時間3分。これを使うと、、、

+++++++++[>+++++++++++<-]>--.+.+.
たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!たのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!すごーい!すっごーい!わーい! たのしー!すっごーい!すっごーい!なにこれなにこれ!たーのしー!なにこれなにこれ!たーのしー!なにこれなにこれ!

こうなります。
KemonoはBrain f*ckと同じく、チューリング完全な言語ですから愛があればきっと無限の可能性があるはずです。
最後までありがとうございました。
(アニメ見ないとな。)

ABC037-D問題による過去との実力比較

今年ももうすぐ終わります。今年一年楽しかった思い出(PCK)も忘れたい思い出(procon,JOI)もいろいろできました。1年を通してとても競プロ的に充実していたと思います。

ということで、自分の競技プログラミング力が今年1年でどの程度上昇したのか確認してみることにしました。

f:id:nasatame:20161228215159j:plain

まだ薄青というとても誇れたものではないレートですが、確実に今年の7月からみると上昇しています。

次にコードによる比較を行ってみることにしました。
これは5月27日に解いた。
abc037.contest.atcoder.jp
のコードです。


改めてみるとメモ化再帰しているのは分かりますが、正直なにやってるのかわからないぐらいひどいコードです。メモリも93MBも消費しています。

これは12月28日(今)解いてみたD問題のコードです。かなりスマート(解法どおり)なコードです。メモリ消費は16MBほどです、なんと1/5ほどになりました。実行時間も797msから576msと200msほども短くなっています。あんまり差がないきがしますね。

最近はAtCoder以外にもCodeForcesなどに参加するようになりましたがぜんぜん駄目です。今年はいろいろ失敗することが多い年でした。でもそれはいろいろ挑戦するようになったから失敗も多くしてしまったのだと思います。これからも成長を止めないように頑張っていこうと思います。

来年は、AtCoderで青くできたら黄色くなりたいです。最後に、おそらさん、yumechiさん今年一年本当にありがとう。いろんなところでお世話になりました。大好きです。この場を借りて述べさせていただきます。

駄文を最後までお読みいただきありがとうございます。

JOI2016/2017予選参加記 JOI予選落ちた勢の戯言

 

2016年12月11日に行われたJOI2016/2017予選に参加しました。
 
結果は、残念なことに240点で本選に出場することができませんでした。
予選敗退の理由は、提出ミスです。
負け惜しみのようですが、解答ファイルの提出順序を間違ったり。
コマンドプロンプトで実行した結果をテキストファイルにコピーする過程で改行コードを抜かしたりなど、つまらないミスで160点ほど落としてしまいました。
一応、結果はあっていたので(フォーマットを除く)とても悔しいかったです。(それも含めて実力なんだが、、、)
 
さて、このようなミスで点数を落とさないためにはどうしたらいいのか考えてみました。
 
そのなかで改行などフォーマットのミスを減らすために考えたのはバッチファイルを利用することです。
 
あるディレクトリがあるとします。その中に、
・実行ファイル.exe(例ではjoi.exeとする)
・入力ファイル.txt(例ではin.txtとする)
があるとこんなコマンドを使用することが出来ます。
 
コマンドプロンプトを立ち上げて。そのディレクトリに移動して。
type in.txt | joi.exe >> out.txt
と打つと。
in.txtの中身がjoi.exeに入力されてその結果がout.txtに出力されます。
 
それを踏まえてこのようなbatファイルを作ってみました。
 

 

実行結果です。f:id:nasatame:20161216222107p:plain

 
使い方は、最初にexeファイルをコマンドプロンプトにドロップして、その後にスペース区切りで入力ファイルをドロップするだけです。このようにします
joib.bat joi.exe in.txt in.txt in.txt in.txt in.txt
少しバッチファイルに手を加えればバッチファイル実行後随時入力ファイルをドロップするように出来たりいろいろできます。
 
二つ目に考えたのが、1,2,3,4,5とファイルを提出するところで5,4,3,2,1などと提出するようなミスを減らす方法ですが。
これは考えてもどうしようも出来ませんでした。
あえてあげるなら一度全部提出した後ダウンロードしてみて確認するぐらい。
まあそんなミスするやつはいないでしょう()。
 
今回見事予選落ちという結果になったJOIですが、考えてみれば前からほしかった基本情報技術者などの資格にチャレンジするための時間が手に入ったと考えればそれほど悪くはなかったです。
 
このような戯言、JOI予選で落ちた腹いせに書いた文章に最後までお付き合いいただき本当にありがとうございます。
(実はみんなやってるテクだったりしたら悲しいです、あと参加記とか書いててまったく予選問題の解説しないでごめんなさい)