JOI2014-2015(第14回日本情報オリンピック)予選参加記
✖╹◡╹✖<本選で待ってます。きっと4完してくださいね!
— いいんちょ (@E_ntyo) December 15, 2014
俺の出来栄え
3完太陽…
— いいんちょ (@E_ntyo) December 14, 2014
プロの声
1:やるだけ
2:全探索
3:やるだけ
4:DP
5:やるだけ
6:半分全列挙+segtree
— yokozuna57 (@yokozuna_57) December 14, 2014
1時間で5完だったせいで、これは簡単すぎて6完じゃないと通らないかもしれないという焦りと、どこか間違ってるんじゃないかという焦りに苦しめられてとてもつらかったし不安
— 物 (@potetisensei) December 14, 2014
1,2,3,4は30分でとけたので、これ4完ボーダーじゃない可能性
— Div0x267B (@Div9851) December 14, 2014
各位のを見る限り5完+αはできてそうですね...
— Div0x267B (@Div9851) December 14, 2014
ζ*'ヮ')ζうっうー!今回の予選は簡単だったかもです!平均満点かなあ?
— Div0x267B (@Div9851) December 14, 2014
問題毎の感想(全三問)
全問C++で挑みました(それ以外に選択肢がなかった)。
4問目はDPで歯が立たないし5問目は実装に必要な時間が足りなかったのでできませんでした。6問目は見てすらいません。
問題1 水道料金 (Water Rate)
あまり好きではない表現だが、俗にいうやるだけ問題
#include "cstdio" #include "iostream" #include "algorithm" #include "string" #include "functional" #define REP(i,n) for(int i=0; i<n; ++i) using namespace std; int main(){ int a,b,c,d,p,x,y,cost; cin >> a; cin >> b; cin >> c; cin >> d; cin >> p; x=a*p; if(p<=c) y=b; else y=b+d*(p-c); cost = min(x,y); cout << cost << endl; return 0; }
問題2 クリスマスパーティー (Christmas Party)
前年度までの問題と難易度,パターンはほぼ変わらず。
手続き型言語であれば、条件分岐と繰り返しが理解できていれば解けると思う。
ここまで完答すればBランクです。
#include "cstdio" #include "iostream" #include "algorithm" #include "string" #include "functional" #define REP(i,n) for(int i=0; i<n; ++i) using namespace std; int main(){ int n,m; cin >> n; cin >> m; int target[m],friends[n],score[n]; REP(i,n) score[i] = 0; REP(i,m) cin >> target[i]; REP(i,m){ REP(z,n) cin >> friends[z]; REP(j,n){ if(friends[j] == target[i]) score[j] += 1; else score[target[i]-1] += 1; } } REP(i,n) cout << score[i] << '\n'; return 0; }
問題3 気象予報士 (Weather Forecaster)
平面座標を利用した問題であることは昨年度と共通。しかしスーパー易化。
問題文にもあったように、空白の出力に注意。
#include "cstdio" #include "iostream" #include "algorithm" #include "string" #include "functional" #define REP(i,n) for(int i=0; i<n; ++i) using namespace std; int main(){ int h,w; cin >> h >> w; char sky[w]; int after_sky[w]; REP(i,h){ REP(z,w){ sky[z] = 0; after_sky[z] = 0; } REP(z,w){ cin >> sky[z]; } REP(j,w){ if(sky[j] == 'c'){ after_sky[j] = 0; }else{ for(int k=j; k>=0; --k){ if(sky[k] == 'c'){ after_sky[j] = j-k; break; }else{ after_sky[j] = -1; } } } } REP(z,w){ if(z == w-1) cout << after_sky[z] << '\n'; else cout << after_sky[z] << '\0'; } } return 0; }
最後に
俺はこれでしばらく競技プログラミングをしなくなってしまう(大会前もしていなかっただろ)と思います。サポートして下さった皆様、ありがとうございました。