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

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

Codeforces Round #166 (Div.2)

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

A. Beautiful Year

ざっくりと大意

・yより大きくてどの桁にも重複した数字がない最小のものはいくつか?

方針のようなもの

・1ずつ足す。やや区間が長いトコもあるけど今回の制限でなら問題なし。

n=int(raw_input())
while 1:
    n+=1
    chk=str(n)
    if len(set(list(chk)))>=4:
        print n
        break

B. Prime Matrix

ざっくりと大意

・n*mの行列でドコの行/列でもいいので素数だけにしたい
・行/列の中の数の1つに対して1を足すと1手となる。最小の手数は幾つか?

方針のようなもの

・全部はさすがに間に合わなかった。。後で考える。

n,m=map(int,raw_input().split())
p=[]
for i in xrange(n):
    p.append([int(x) for x in raw_input().split()])

def prime_t(t):
    i=2
    while i**2<=t:
        if t%i==0:
            return 0
        i+=1
    return 1
l=[]
for i in range(2,100003):
    if prime_t(i):
        l.append(i)
#print l
ans=100003*501
for i in xrange(n):
    chk=0
    for j in xrange(m):
        k=p[i][j]
        while 1:
            if k in l:
                break
            else:
                k+=1
                chk+=1
            if chk>ans:
                break
    ans=min(ans,chk)

for i in xrange(m):
    chk=0
    for j in xrange(n):
        k=p[j][i]
        while 1:
            if k in l:
                break
            else:
                k+=1
                chk+=1
            if chk>ans:
                break
    ans=min(ans,chk)

print ans