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
もうちょっと短く書けそうな気がする。。