いつも頭に問題を

競技プログラミング中心で思ったことを書いてく

ABC060

AtCoder Beginner Contest 060 - AtCoder Beginner Contest 060 | AtCoder

出ました

結果は3完、悔しい結果になりました



・A.Shiritori

文字列a,b,cが与えられるのでa,b,cの順
にしりとりができるかを出力する

stringで受けたら文字列の何番目かの指定が容易だったので

if(a[a.size()-1]==b[0]&&b[b.size()-1]==c[0]){
	cout << "YES"<<endl;
}else{
	cout <<"NO"<<endl;
}

と判定したらAC


・B.Choose Integers
問題文がごちゃごちゃしてるけどAの倍数を選んできてBで割ったあまりがCになるか総当たりするだけ
ループ回数をAにしてテストケース投げたら1 100 97の時NOが出てしまった
ループ回数をどうすればいいかわからなかったので適当に300とか書いたらAC
よく考えたらB回ループすれば網羅できるなってわかるけど気が付いたころにはC問題にとりかかっていた


・C.Sentou
ボタンを押すとシャワーがt秒間出る、出てる途中で押したら押したときからt秒間出る
温泉行ったらよくあるやつ♨
最近そっくりな問題解いた気がしたのですぐ書けた
後で調べたら
B: 自動ドア - AtCoder Beginner Contest 024 | AtCoder
これだった、まったく同じか?
難なくAC
計算量はたぶんシミュレーションすると部分点(今回は無いが)とかで配列分だけ総当たりしておけばいいはず


・D.Simple Knapsack
某氏からナップザック問題を習ったばかりだったのでDPしか考えてなかった
70-80分間くらいずっとDPで解こうと思ってたがメモリも実行時間も無理だった
最初は二次元配列で格納していたがREが連発したので1次元でも出来るのではと思って必死こいて書き変えたらうまくいったが結局値が大きくなるとダメだった
制約が厳しいなぁって思ってた
解説聞いたらWが連続4種類しか無かったのでよく読みましょうという感じで終わってしまった
うまい書き方が思いついて無いが4種類の配列に突っ込んでソートしてDPでもなんでもやれば終わりそう


茶色になりました♨
f:id:ratetion:20170430010028p:plain
AtCoder