競プロをしながら、節約と株式投資でセミリタイアを目指す東大卒のブログ

東大卒でメーカー勤務の私がセミリタイアするために投資や競プロを頑張っていこうという趣旨で始めたブログです。独身男性です。お金の大切さや今後の生き方も併せて伝えられたらと思います。

競技プログラミング~ABC170前半~

おはようございます。しほみんです。

 

ABC170です。今回出たところあんまり勉強してないところでした。ということで普通に痛い目にあいました。(URLなぜかはれないい...)

 

https://atcoder.jp/contests/abc170

 

自分の競技プログラミングへのスタンスです。

<自分のプログラミング力>

・レートは800程度になりました。緑と茶をうろちょろしています。

・C#でクラスとかつかってアプリケーションは作れます。

<Atcoderでのスタンス>

・アルゴリズムについて問題でいろいろ学んでいる。第3回PAST70点で中級取得。

・基本的に本番でやっている。現在50回以上参加、2年目。

・目標はABCのD問題までをちゃんと短時間で解けるようにすること。パフォーマンスは1000以上、できれば水色(1200以上)は欲しい。

 

今回はABC、25分(2WA)でした。D問題は普通に気が付きませんでした....まあC問題が伏線だったので、それに気が付くだけだったとも言えます。レーディングも578で、レートも 896→868で下がりました。

 

今回はE問題まで振り返ります。

長くなるので前半はC問題まで書きます。前回に引き続き考察をメインに書きます。

コードは別に上げます。

 

 

A問題

5つの変数が与えられています。そのうち1つを書き換えて0にしました。

書き換え前は0ではないことを前提に、何番目の変数が変わったか答えなさい。

 

1つしか条件がないので頭から順序で"0"かどうかを見ればよいです。

多分問題条件上int型でもlong型でも処理できると思うのですが、64bit以上の巨大な変数が入った場合はint型やlong型で読んでしまうと変換しなかった数が保持されません。

問題上、特に関係ないのですが、string型で普通に読んでしまって答えちゃえばいいかなあという感じです。

s == "0"で条件分岐します。

 

 

B問題

庭に何匹か動物がいます。

それは2本の足をもつ鶴か4本の足を持つ亀です。

今X匹います。その足の総数はYである。

これがあり得る鶴亀の組み合わせがあるか判定してください。

 

 

気づくことは2つです。

・2本か4本足なので、奇数の足の本数はあり得ない。

・最少は全部鶴で2X、最大は全部亀で4X。よって、2Xから4Xの間である必要がある。

 

ということで、2Xから4Xの間の偶数であるYが条件を満たします。

それを書きます。

 

C問題

整数Xと、数列p1,p2,....,pnがあります。

p1からpnまでの数以外で、Xと絶対値の差が小さいものを求めなさい。

 

一番単純なのは、

・Xから足してみる。その数が条件を満たしたはじめての数をlargeXとする。

・Xから引いてみる。その数が条件を満たして初めての数をsmallXとする。

・largeX -XとX-smallXを比較して、この絶対値が小さいほうが答え、同じときはsmallXを出力する。

 

ただ、今回注意すべきは範囲の条件で、1<=X<=100なので、0や101も答えとしてあり得ます。そこまで注意して答えを出します。

こういうときは、範囲を大きめに見積もって考えるといいかなあって感じですね。そうするとまあ誤作動しにくくなります。(もちろんオーバーフローはだめですが)

 

 

最後に....

前半は割と単純だった気がします。ただ、Cみたいな範囲に気を付けてないと見する問題もあるので注意が必要です。

木曜にはD,E問題を振り返ります。両方時間内にとくにはちょっと訓練が必要ですね....特にEは初めてデータ構造の使い方を覚えたのでちゃんと使えるようにしたいですね。

 

ではでは。