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

Codeforces Round #274 (Div. 2)

はい。 ox---(0/0) 1138(-65)
http://codeforces.com/contest/479
Bがちょっとミスしてpre通った後にSystemで落ちて撃沈。。

A. Expression

ざっくりと大意

・a,b,cを順番は入替えずに(),+,*を用いた計算結果で最大になるものを出力する。

方針のようなもの

・式の網羅と比較を丁寧にすればよかった。

a=int(raw_input())
b=int(raw_input())
c=int(raw_input())
m=0
x=a+b*c
m=max(m,x)
x=(a+b)*c
m=max(m,x)
x=a*(b+c)
m=max(m,x)
x=a*b*c
m=max(m,x)
x=a+b+c
m=max(m,x)
print m

a+b+cは問題文に記載されていないけどpreで落とされるので親切な問題だったと思う。
同室ならHack成功できるチャンスだった群
http://codeforces.com/contest/479/submission/8305062
式の結果を配列に入れてるのに結果の比較で配列を全部は見ていない。
http://codeforces.com/contest/479/submission/8307492
f[1]=a*(a+b); 式が一箇所オカシイ。。
大体が式のパターン網羅不足か、若しくはa,b,c順番を入替えられないのに入替えてしまっている人がいた。
アメリカやロシア、東欧らへんは言語圏のイメージで問題文の誤読はあんましなさそうだけど、それ以外の国は今回のような入替え出来る出来ない制限の誤読とか期待値が高いこともあるかもしれないメモ。

B. Towers

ざっくりと大意

・n本ある高さ\(a_i\)の塔を高い塔から低い塔に高さを1移して、最も高いものと最も低いものの差を小さくする。
・操作は最大k回行えるが差を縮めることが出来たらk回前に操作を終了して良い。
・一行目に最も高いと最も低いものの差と、操作を行った回数を出力。2行目以降に高さを移す塔の番号を出力。

方針のようなもの

・最も高いものと最も低いものの差が2以上あれば移して回数を加算して、差が1以下なら移しても大きさが入れ替わって差は縮まらないので操作終了する。

n,k=map(int,raw_input().split())
l=map(int,raw_input().split())
ans=[[0,0]]
for i in range(k):
    a=max(l)
    b=min(l)
    if a==b:
        ans[0][0]=0
        break
    else:
        if a-b==2:
            chk=1
        x=l.index(a)
        y=l.index(b)
        l[x]-=1
        l[y]+=1
        ans.append([x+1,y+1])
        ans[0][1]+=1
        ans[0][0]=max(l)-min(l)
        if max(l)-min(l)<=1:
            break
for i in range(len(ans)):
    print ans[i][0],ans[i][1]

コンテスト中に提出したものはSystemで落ちたので、上のコードはその後に修正してAC出したものです。中断終了条件を移し前に見ていた最大/最小の差が2であったら操作後に中断するようにしていたが、同値が複数あった場合は処理するべき対象を残して中断してしまっていた。。
同室ならHack成功できるチャンスだった群
http://codeforces.com/contest/479/submission/8306476
自分のその中断条件のミスで落ちたもの。。
http://codeforces.com/contest/479/submission/8311895
やっぱり多分終了判定がオカシイのだと思う。塔が1つしか無くても操作を1回行っている。