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

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

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

Codeforces Round #218 (Div. 2)

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

A. K-Periodic Array

ざっくりと大意

・全部でn個並んでいる1,2をk個の周期性あるものにするのに何箇所を変更すればよいか??
・サンプルの1は2つの数で周期性ありにするのに2,1で周期させるので1箇所変更。
・サンプルの2は4つの数で1,1,2,1で既に周期性あるので変更箇所なし。
・サンプルの3は3つの数で全てを1にする1,1,1で周期性ありにして3箇所変更。

方針のようなもの

・A問題のほうが難しくね??あとで

B. Fox Dividing Cheese

ざっくりと大意

・2頭のこぐまが食べようとしているa,bの重さのチーズを小狡い狐が同じ大きさに揃えてあげましょうということで、
・2で割り切れるなら半分がこぐまのもの、3で割り切れるなら1/3がこぐまのもの、5で割り切れるなら1/5がこぐまのもの。

方針のようなもの

・2,3,5で素因数分解、それ以降で残った数もとりあえずリストに保存して比較。

a,b=map(int,raw_input().split())
s=[2,3,5]
chk=0
if a==b:
    print 0
    exit()


def soin(x,p,f):
    h=[]
    for i in range(3):
        while 1:
            if x%p[f]==0:
                x/=p[f]
                h.append(p[f])
            else:
                f+=1
                break
    if x!=1:
        h.append(x)
    return h


al=soin(a,s,chk)
bl=soin(b,s,chk)

ml=min(len(al),len(bl))
for i in range(ml):
    if 2 in al and 2 in bl:
        al.remove(2)
        bl.remove(2)
    elif 3 in al and 3 in bl:
        al.remove(3)
        bl.remove(3)
    elif 5 in al and 5 in bl:
        al.remove(5)
        bl.remove(5)
    else:
        break
if len(al)==0:
    if bl[-1]!=2 and bl[-1]!=3 and bl[-1]!=5:
        print -1
    else:
        print len(bl)
elif len(bl)==0:
    if al[-1]!=2 and al[-1]!=3 and al[-1]!=5:
        print -1
    else:
        print len(al)
elif al[-1]==bl[-1]:
    print len(al)+len(bl)-2
elif (al[-1]==2 or al[-1]==3 or al[-1]==5) and (bl[-1]==2 or bl[-1]==3 or bl[-1]==5):
    print len(al)+len(bl)
else:
    print -1

もうちょっと短く書けそうな気がする。。