AtCoder Regular Contest 063 参加記

はい。 oo-- 1294(+94)
http://abc047.contest.atcoder.jp
http://arc063.contest.atcoder.jp
はい。C,D問題までは難易度それほどでもなかったと思う。まぁABCの方に出てたら全完のチャンスでしたね。というかABCの方も解いてみた。

A - キャンディーと2人の子供

Python2

l=map(int,raw_input().split())
l.sort()
print 'Yes' if l[2]==l[1]+l[0] else 'No'

最大値と他2つの和が等しくなるかで判定した。

B - すぬけ君の塗り絵 2 イージー

Python2

w,h,n=map(int,raw_input().split())
l=[['.' for i in range(w)] for j in range(h)]
for i in range(n):
    x,y,a=map(int,raw_input().split())
    if a==1:
        for i in range(h):
            for j in range(x):
                l[i][j]='#'
    elif a==2:
        for i in range(h):
            for j in range(x,w):
                l[i][j]='#'
    elif a==3:
        for i in range(y):
            l[i]=['#' for j in range(w)]
    else:
        for i in range(y,h):
            l[i]=['#' for j in range(w)]
 
ans=chk=0
for i in l:
    ans+=i.count('.')
print ans

塗り潰しをシミュしたけど塗ってない範囲の情報を0,W 0,Hで持って置いて2 1 1が与えられたら2,Wとするみたいな方法で行けたらしい。

C - 一次元リバーシ

Python2

s=raw_input()
ans=0
t=''
for i in s:
    if t!='' and t!=i:
        ans+=1
    t=i
print ans

元の並びで色の変わっている箇所が何箇所か調べれば、それが「全ての石を同じ色に」する必要個数になるはず。

D - 高橋君と見えざる手

Python2

IS=float('inf')

n,t=map(int,raw_input().split())
a=map(int,raw_input().split())
ans=0
chk=1
x=IS
y=0
for i in a:
    if x>i:
        x=i
    elif y<i:
        y=i
    if i-x>chk:
        ans=1
    elif i-x==chk:
        ans+=1
    chk=max(chk,i-x)
print ans

iとiより手前の町のリンゴで差額が最大値になる箇所が何箇所あるかを探した。サンプル2が差額10が発生するのが{30,40}と{10,20}の2箇所で解が2になっている。なのでそういうのを調べた。