Codeforces Round #370 (Div.2) 参加記

はい。 oo--- unrated...
http://codeforces.com/contest/712
開始前から接続が不調でいつの間にか始まっててunratedになった回。

A. Memory and Crow

ざっくりと大意

・\(a_i\) = \(b_i\) - \(b{i+1}\) + \(b{i+2}\) ...が成立するような数列bを作る。

python

n=int(raw_input())
l=map(int,raw_input().split())
ans=[]
e,o=0,0
for a,i in enumerate(l[::-1]):
    if a%2==0:
        t=i-(o-e)
        ans.append(str(t))
        o+=t
    else:
        t=i-(e-o)
        ans.append(str(t))
        e+=t
print ' '.join(ans[::-1])

末尾から見ていけば入る数は決まると思う。というか末尾から見ないと一度で定められないと思う。

B. Memory and Trident

ざっくりと大意

・文字列Sでの移動仕方を最小の変更で開始位置に戻れるようにする。

python

s=raw_input()
if len(s)%2:
    print -1
    exit()
#URDL
x,y=0,0
l=[0]*4
for i in s:
    if i=='U':
        l[0]+=1
        y+=1
    elif i=='R':
        l[1]+=1
        x+=1
    elif i=='D':
        l[2]+=1
        y-=1
    else:
        l[3]+=1
        x-=1
if x==y==0:
    print 0
else:
    x=abs(x)
    y=abs(y)
    print (x+y)/2

使わなかったものが残ってる。。。x,yでの離れてる距離、マンハッタン距離を2で割ると開始位置に戻れる計算になる。