MergerAtCoder「3月中に毎日1問解いて黄色になろう!」キャンペーン7問目。3日に1問ペースすら崩れてると思いきや、残念ながら2問連続投稿でペース通りです。以下の操作を与えられた配列に残り要素が1つになるまで行う。最大値とそれを得る方法を求めよ。実験していると、割とすぐに「偶奇で分けて、その中では任意に選ぶことが出来る」ということが分かります。具体的には、A=[1,3,5,2,4]としたときに、1と4を組み合わせるなら3番目で[1,5,4]にする→[5(1+4)]にするという感じで、奇数個離れていれば自由に組み合わせられます。逆に、偶数個離れているときはどう頑張っても無理です。いうのも、3の操作で間の間隔が2減るので。「偶奇で分けた後、"""自由に"""組み合わせることが出来る」ので、偶奇別にmax(0,a[i])の総和が大きいほうを採用します。作り方も答えないといけなくて、これは右端から消していく感じで頑張って実装すると出来ます。O(N)で制約が非常に緩いので、まあ出来るかと。偶数の時は最初にa[0]を削除すると奇数のパターンに容易に帰着できます。ここで気を付けなくてはいけないのが、「全部負の数」のパターン。max(0,a[i])で全部ダメになるので、これだけ例外処理をしなくてはなりません。この時は足し算すると損をするので、1要素以外すべて2の方法で消します。これは割と簡単に実装できるのではないかと。右から消していくと、要素を過ぎた後が2ではなく3の処理になってしまうので、「1」を連発するか、左から消すことをお勧めします。0;}感想Dより簡単なのは思考できたからなんでしょうね...思いつかなきゃ思いつかないです。...「3月中に毎日1問解いて黄色になろう!」キャンペーン11問目。Sort今年の解き納め問題。no.337/338/339/340うん。Twitterで宣言されていた通り比較的簡単だった。日)ネットの海に生息するらしいバーチャルグソクムシ。競プロとCTFをメインに、たまにEsolangを混ぜます。(7)月別アーカイブリンクGitHubはてなブログをはじめよう!Hyogaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。