読者です 読者をやめる 読者になる 読者になる

水面下の夢

競プロやイラストに興味があります.メインブログがここ.ソシャゲの話はこっち(http://ameblo.jp/0n0-yumechi/).ブログアイコンはYaQ(@8_9_00)さんから.

ABC 031 に参加した

Python AtCoderABC 競技プログラミング

3完,A1WA, C6WA,183位.今回のABC,ここ最近のABCの中では少しD問題がむずかしめだったのかも?
ちょっとWAはやしすぎとちゃう…



A問題

入力A,Bが与えられるので,(A+1)*BとA*(B+1)のどっちが大きいかを見てあげるだけ.
この辺にぃ,こんな単純な入出力で1WA生やした,thanks祭り出場予定者いるらしいっすよ?

a,b = map(int, input().split())
print(max((a + 1) * b, a * (b + 1)))

bashで書いた場合がショートコードなのかな?(フォロワーさんから少しアイディアを頂いて,短く書いてみました.

awk '$0=$1*$2+($1>$2?$1:$2)'

B問題

入力されたものを逐次見ていって分岐.
入力inp, 最小値l,最大値hとすると

  • inp < l の時 l - inp
  • l <= inp <= h の時 0
  • h < inp の時 -1

を出力するだけ.やるだけ.

    l, h = map(int, input().split())
    for i in range(int(input())):
        a = int(input())
        if a < l:
            print(l - a)
        elif h < a:
            print(-1)
        else:
            print(0)

C問題

全探索するだけなのに,何度も事故って嫌になりました.6WAってなんだろう.過去最高な気がします.
多分,aokiくんの選ぶ数字の位置が同じ結果になりそうならば,一番左を選ぶっていうアルゴリズムがうまく組めてないんだと思う.(名推理)

とりあえず全探索でいいと思いますが,少し複雑です.
takahashiくんの選択をまず決めて,aokiくんが選択するものを探すためにひたすらループ.
同じものは選べないので,それだけには注意.あと,なんか切り取った時にバグが起こるみたいで(私のプログラムが弱いだけ),切り取った配列の長さが1だった場合も処理しないようにする.
あとは,現在のaokiくんの選択が,それ以前のaokiくんの選択より大きければ,問答無用で変更する.値が一緒の場合は,aokiくんの選択の位置を見て考える.

で,takahashiくんの選択を次へ移しつつ,最大値を取るみたいな….


多分,同じものを選んだ時の処理や,配列の長さが1になってしまうときの処理でバグらせまくっていたんだと予測.

長くなってしまったけど,とりあえず解けたからOKかなあ….

    n = int(input())
    ali = [int(i) for i in input().split()]
    res = -10000
    # i = takahashi select, j = aoki select
    for i in range(n):
        taoki, ttakah = -10000, -10000
        ti = i
        aidx = -1
        for j in range(n):
            parlist = ali[i:j+1] if i < j else ali[j:i+1]
            parlength = len(parlist)
            if i == j or parlength < 2:
                continue
     
            # print(parlength, parlist)
            nowaoki, nowtakah = 0, 0
            for k in range(parlength):
                if k % 2 == 0:
                    nowtakah += parlist[k]
                else:
                    nowaoki += parlist[k]
     
            if nowaoki > taoki:
                taoki = nowaoki
                ttakah = nowtakah
                aidx = j
            elif nowaoki == taoki and j < aidx:
                taoki = nowaoki
                ttakah = nowtakah
                aidx = j
        # print(taoki, ttakah, i, aidx)
        # print()
        res = max(res, ttakah)
    print(res)

D問題

多分,部分点は総当りじゃないかな.
満点解放は見たけど,よくわかりませんでした.とりあえず1つ2つの入力例を使って分割しまくってダメなら次へって感じなんですかね.



D問題は今度とけたら解いておこうかなあ.