AtCoder Beginner Contest 043 参加記

はい。 oooo
http://abc043.contest.atcoder.jp
久しぶりに全完だった。というかABCはARCのB問題相当までになったので難易度が落ちただけでもある。

A - キャンディーとN人の子供イージー

python

n=int(raw_input())
print (1+n)*(n/2) if n%2==0 else (1+n)*(n/2)+(1+n)/2

なんか無駄に長く書いてしまった。Nが最大100なのでforとかで全部加算してもどうにもでもなったA問題。

B - バイナリハックイージー

python

s=raw_input()
ans=[]
for i in s:
    if i=='B':
        if len(ans):
            ans.pop(-1)
    else:
        ans.append(i)
print ''.join(ans)

シミュレートした。入力中の文字がない状態でも'B'がありうることに対策してシミュレートで大丈夫だと思う。

C - いっしょ

python

IS=float('inf')
xy=[(1,0),(-1,0),(0,1),(0,-1)]
bs=[(-1,-1),(-1,1),(1,1),(1,-1)]
def niten(a,b): return abs(a-b) if a>=0 and b>=0 else  a+abs(b) if a>=0 else abs(a)+b if b>=0 else abs(abs(a)-abs(b))
def gcd(a,b): return a if b==0 else gcd(b,a%b)
def lcm(a,b): return a*b/gcd(a,b)
def euclid_dis(x1,y1,x2,y2): return ((x1-x2)**2+(y1-y2)**2)**0.5
def choco(xa,ya,xb,yb,xc,yc,xd,yd): return 1 if abs((yb-ya)*(yd-yc)+(xb-xa)*(xd-xc))<1.e-10 else 0
 
n=int(raw_input())
#n,k=map(int,raw_input().split())
l=map(int,raw_input().split())
ans=IS
for i in range(-100,101,1):
    tmp=0
    for j in l:
        tmp+=(i-j)**2
    ans=min(ans,tmp)
print ans

コピペミスで出力忘れて無駄にWAした。。当初はどうやって最小値を探すか悩んだけど長さ100以内の数列に最小-100から最大100なので全探索で問題なかった。

D - アンバランス

python

s=raw_input()
tmp=[s[0], s[1]]
chk=len(s)
if tmp[0]==tmp[1]:
    print 1,2
elif chk==3 and len(set(list(s)))<3:
    print 1,3
elif chk<4:
    print -1,-1
else:
    for i in range(2,chk):
        if len(tmp)==3:
            tmp.pop(0)
        tmp.append(s[i])
        if len(set(tmp))<3:
            print i-1,i+1
            exit()
    else:
        print -1,-1

アンバランスの成立する箇所の探し方を当初は2文字続けて同じ文字を探すという雑な探し方でWA食らう。単純な調べ方で出来るはずという思い込みのまま結構悩んだ。その後に2文字続けて同じ文字か、どこかで1,3文字目が同じならアンバランスになることに気づいてその方針でなんとかAC。