AtCoder Beginner Contest 021

はい。
https://beta.atcoder.jp/contests/abc021

A - 足し算

Python2

n=int(raw_input())
print n
for i in range(n):
    print 1

全部1を使う。

B - Cakes and Donuts

Python2

n=int(raw_input())
a,b=map(int,raw_input().split())
k=int(raw_input())
p=set(map(int,raw_input().split()))
p.add(a)
p.add(b)
print 'YES' if len(p)==k+2 else 'NO'

a,bとPで重複があるかどうかだと思う。。

C - 正直者の高橋くん

Python3

mod=10**9+7
 
n=int(input())
a,b=map(int,input().split())
m=int(input())
d={i:[] for i in range(1,n+1)}
for i in range(m):
    x,y=map(int,input().split())
    d[x].append(y)
    d[y].append(x)
 
f=set([a])
u=set([])
l=set([a]) #log
ft=[1]*(n+1)
ut=[0]*(n+1)
 
ans=0
while 1:
    ans+=1
    while len(f):
        x=f.pop()
        for i in d[x]:
            if i not in l:
                u.add(i)
                ut[i]=(ft[x]+ut[i])%mod
    i=len(u)
    if b in u:
        print(ut[b])
        exit()
    for j in u:
        l.add(j)
    f={u.pop() for j in range(i)}
    ft=[i%mod for i in ut]
    ut=[0]*(n+1)
 

幅優先探索した。前回までの移動済の箇所には移動しないとか、いま移動してる箇所にはいくつの移動の仕方があるのかとか気をつけてx回目の移動でゴールに届いて、同じ回目を全部見終わったら解が求められる。