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

君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

Codeforces Round #213 (Div. 2)

はい。
http://codeforces.com/contest/365

A. Good Number

ざっくりと大意

・n行の\(a_i\)の数が0からkまでの数を全て含んでいればGood Numberなのをカウントする。

方針のようなもの

・setにして重複排除してリストに戻してsortして、0からkまで一致するかチェックする。

n,k=map(int,raw_input().split())
ans=chk=0
for i in range(n):
    w=list(raw_input())
    w=list(set(w))
    w.sort()
    if len(w)>k:
        for j in range(k+1):
            if w[j]!=str(j):
                break
            elif w[j]==str(k):
                ans+=1
                break
print ans

B. The Fibonacci Segment

ざっくりと大意

・問題文表記では\(a_i\)=\(a{i-1}\)+\(a{i-2}\)で、配列とかにするとl[i]==l[i-1]+l[i-2]が成立している区間の最大長を探す。
・配列長が1なら解は1で、2なら解は2になる。

方針のようなもの

・配列長が3以上ならとりあえず最低でも解を2にしてから、l=[i-1]+l[i-2]が見つかったら解を3にして更にその隣も成立しているかを見ていく。

n=int(raw_input())
l=map(int,raw_input().split())
ans=chk=x=2
if len(l)==1:
    print 1
    exit()
#if l[0]==l[1]:
#    ans=2
for i in range(2,n):
    if l[i-1]+l[i-2]==l[i]:
        if chk<3:
            chk=3
        else:
            chk+=1
    else:
        chk=2
    ans=max(ans,chk)
print ans