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予選で落ちた腹いせに書いた文章に最後までお付き合いいただき本当にありがとうございます。
(実はみんなやってるテクだったりしたら悲しいです、あと参加記とか書いててまったく予選問題の解説しないでごめんなさい)