0.はじめに
最近Dまで解けることが多くなってきて調子が
揚がってきた今日この頃のコンテスト。
A~Dまでは順調に解けたもののEは解けませんでした。
そんなこんなでレートは+18で737まで回復しました。
1.A - 9x9
A問題らしいすっきりした問題。
読み込んだ3文字の1文字目と3文字目をint型にして
掛けて出力して終了。
https://atcoder.jp/contests/abc389/submissions/61783267
2.B - tcaF
Bにしてはちょっと難易度高いかなと思いきや
150点問題。
iを2からNまで1つずつ増加するループを回し
N=N÷iを繰り返し、Nが1になったタイミングの
iを出力して終了。
https://atcoder.jp/contests/abc389/submissions/61793740
3.C - Snake Queue
とりあえずパッと問題を読んだところ
ざっとみデキューを使えばいけるかなという感触でした。
考え方
・蛇の先頭位置をクエリ2がない場合の位置ですべて保持
・クエリ2で除去した長さは保持しておく
・出力するときは除去した長さ分を引いた値を出力
使用する変数
・LH:蛇の長さをそのまま入れるキュー
・SH:蛇の先頭位置を入れるキュー
・S:次の蛇の先頭値(初期値0)
・M:いなくなった蛇の合計
処理
・タイプ1のクエリ
・LHにlを追加
・SHにSを追加
・Sにlを加算
・タイプ2のクエリ
・LHの左の値を取り出してpに格納
・SHの左の値を取り出し
・Mにpを加算
・タイプ3のクエリ
・SHのk番目の値からMを引いたものを出力
https://atcoder.jp/contests/abc389/submissions/61803592
4.D - Squares in Circle
座標問題なので逃げたくなりましたが、まぁ、次以降の問題もそれほど
行ける気がしなかったので取り組みました。
【考え方】
・以下は固定で円に入る
・原点のマス 1
・原点から4方Rマス 4×(R-1) (原点のマス分はマイナス)
・原点から右上・左上・右下・左下の4つは同じ形になるので
右上分のマスがどれだけ円の範囲になるかを調べ4を掛けて足す。
・円の範囲に入っているマス数の求め方
・X軸正方向のマスの1マス上、R-1マス(下図⑨)の右上頂点が円に入っているかをチェック
(右上頂点の座標と原点の距離がR以内かをチェック)
→入っていればR-1を合計マスに加算して上段(⑥)をチェック
→入っていなければ、左隣のマス(⑧)をチェック・・・
と、調べていき、段ごとに円に入るマス数を調べる
【参考図】
通常数字は確定分、〇数字はチェック対象。
R=4の時、①④⑤⑦⑧⑨が円の中
3①②③
2④⑤⑥
1⑦⑧⑨
0123
【実装】
1.Rを入力
2.回答用変数ansに1+((R-1)4)をセット(固定で円に入る原点からの4方Rマス分)
3.ユークリッド距離判定用変数DにRRをセット(平方根を求めなくてよいよう2乗分)
4.X:段ごとにチェックする右端のマスの座標にR-0.5をセット
5.s:右上部分のマス数合計に0をセット
6.以下iを1~R-1まで繰り返し(参考図左端のように段毎に繰り返し)
-1.y(チェックするマスの右上頂点のy軸座標)にi+0.5をセット
-2.以下jを0~Xまで繰り返し(参考図最下段の3~0に向けてチェック)
-1.x(チェックするマスのx座標の値)にX-jをセット
-2.d(チェックするマスの右上頂点から原点の距離(の2乗))にxの2乗+yの2乗をセット
-3.dがD以下の時(チェックしているマスの頂点が円内に入る場合)6-2.のループをブレイク
-3.sにx-0.5を加算
-4.Xにxをセット(上の段いこうxより右のマスが円の中に入ることは無いため)
7.ansにs×4を加算したものを出力して終了
最初6-4.のXの置換を入れていなかったため処理時間が長くなりましたが
コンテスト中に気づけて事なきを得ました。
https://atcoder.jp/contests/abc389/submissions/61829471
以上