1. 競プロする人
  2. Tenka1 Programmer Beginner C..
2023-12-31 09:52

Tenka1 Programmer Beginner Contest

Tenka1 Programmer Beginner Contest

https://atcoder.jp/contests/tenka1-2018-beginner


↓の提出コードを見ながらの聴取を推奨いたします
A:https://atcoder.jp/contests/tenka1-2018-beginner/submissions/46420228

B:https://atcoder.jp/contests/tenka1-2018-beginner/submissions/46420304


Atcoderホームページ:https://atcoder.jp/home

サマリー

Tenka1プログラマービギナーコンテストのエピソードでは、A問題では2または3文字の文字列を逆順にし、B問題では2人がクッキーを食べたり渡したりする操作の最終結果を求め、C問題では整数の列を並べ替えて隣り合う要素の差の合計の最大値を求めるといったプログラミングの課題が出題されています。

Tenka1プログラマービギナーコンテストのエピソード
Tenka1 Programmer Beginner Contest
A問題
メジャー
問題文
A小文字からなる長さ2または3の文字列Sが与えられます。
長さが2の場合はそのまま、長さが3の場合は逆順にして出力してください。
ABCの場合はCBA、ACの場合はそのままACを出してください。
これはもうやるだけですかね。
Sイコールインプット
if
あ、いや
プリント
S
if
連S
イコールイコール2
else
Sの
カッコ
カンマカンママイナス1
で、どうでしょうか。
カンマかこれ、コロンか。
提出
はい、AC
B問題いきます。
B問題
エクスチェンジ
問題文
高橋くんは最初A枚、青木くんは最初B枚のクッキーを持っています。
2人は高橋くんから始めて、交互に以下の操作を繰り返します。
自分が持っているクッキーの枚数が奇数なら、自分が持っているクッキーを1枚食べ、偶数なら何もしない。
その後、自分が持っているクッキーの半分を相手に渡す。
合計警戒の操作を行った後の高橋くんと青木くんが持っているクッキーを1枚食べます。
自分が持っているクッキーの枚数をそれぞれ求めてください。
ABKが与えられます。
警戒だね、だからABKをとりあえず取ります。
ABKイコールマップイントインプットドットスプリット
で、4iインレンジ警戒
えーと、で
2風
A
パーセント
2イコールマップイントインプットドットスプリット
イコールイコールゼロ
偶数だったら
えー
交互にっていうのがこれ
高橋くんはクッキーを1枚食べ、青木くんに2枚のクッキーを渡す。
操作後、2人はそれぞれに6枚のクッキーを持っている。
あー、1人がやったら2人目か。
高橋くん、青木くん、高橋くん、青木くんの順番ってことですね。
だから
NOW変数を呼ぶと、
NOW変数を呼ぶと、
NOW変数を呼ぶと、
変数を用意して
NOWイコール文字のA
いや、Tにしとこうか。今高橋くんスタートだから。
IF NOWイコールイコールT
高橋くんの順番の時に
Aパーセント
IF Aパーセント2がNOTイコールゼロ奇数だったら
Aマイナスイコール1
ELSE
いや、ELSEじゃなくていいな。
えっと、A割る2してBプラスイコールA
エッドアポート
NOWイコール青木くんAの文字列に入れ替えます。
NOWイコール青木くんAの文字列に入れ替えます。
IF NOWイコールTじゃなかったらELSE
IF NOWイコールTじゃなかったらELSE
つまりNOWイコールAだったら
で、同じIF文を入れ替えます。
で、同じIF文を入れ替えます。
入れていきます
if b%2が奇数だったら
b-1でbを2で割って
プラスイコールbで
nowイコールtに変えます
で出力は
print a test
入力例が542だったら
出力例5 3が正解
入力例2 3 3 3だったら
1 3が正解
入力例3
すごい大きい数字ですが
okそうですね
じゃあ出力というか
提出していきます
はい通りましたので
c問題やっていきます
C問題の解説
c問題
失礼
alignかな
問題文
整数がn個与えられます
アイコメの整数はaiです
これらを好きな順に一列に並べるとき
隣り合う要素の差の合計の最大値を求めてください
この番組撮るとなんか
いつものほどイガラっぽくなるな
整数がn個与えられます
アイコメの整数はaiです
これらを好きな順に一列に並べるとき
隣り合う要素の差の合計の最大値
与えられた整数を好きな順に一列に並べるとき
隣り合う要素の差の合計の最大値を出力せよ
隣り合う要素の差の合計値
入力例1568123
出力例21
38162の順に並べたとき
隣り合う要素の差は合計21になり
これが達成できる最大の値です
でかい順ちっちゃい順ってわけじゃなさそうですね
うーんうーん
うーん
いやー
ていうか配列配点400点なんだ
あれC問題って300点じゃなかったっけ
コンテスト名ちょっと違うから
配点も変わってるのかな
ちょっと喉が限界なので解説を読みます
C問題
作る列をP1からPnとしたとき
Pi-1小なりPi小なりPiプラス1や
Pi-1小なりPiプラス1や
Pi-1小なりPiプラス1や
Pi-1小なりPiプラス1や
Pi-1小なりPiプラス1や
Pi-1小なりPiプラス1や
Pi-1小なりPiプラス1や
PiとなるようなIは存在しないとしてよいです
これはその他の要素の相対的な順序を保ったまま
Piを列の末尾に移動しても
隣り合う項の差の絶対値の和は減らないことによります
末尾への移動操作で新たにこのような箇所ができる可能性もありますが
そのときは末尾から2番目の要素を再び末尾に移動してやることで
してやることで最大化したい値を減らさずにこのような箇所をなくすことができます さてあり得るパターンは p 1大なりコール p 2小なりコール p 3大なりコール
てんてんてんてんか p 1小なりコール p 2大なりコール p 3小なりコールてんてんてんてんのいずれかになります
そうね 大きいやつちっちゃいやつ大きいやつちっちゃいやつって交互にやるべきですね
これら両方のパターンを試して大きい方を出力することにしましょう 対照性より前者の場合のみ考えます
この時となり合う項の差の絶対値の和は p 1-p 2プラス p 3-p 2プラス p 3-p 4てんてんてんてんです
すなわち各iに対し pi が最大化したい値に何回足されるもしくは引かれるかが定まります
たくさん足される値を大きく
たくさん足される値を大きく
たくさん引かれる値を小さくすることでこの値は最大化できるので各 pi につく係数を見て大きい順に大きい要素を割り当てていけば良いです
よってこの問題を解くことができました
コード例も特にないので他のユーザーの方が提出されたコードを読みながら飲み込んでいこうと思います
では今回はここまでにしておきます
また次回お疲れ様です
09:52

コメント

スクロール