AtCoder Regular Contest 032 復習
はい。
http://arc032.contest.atcoder.jp/
A - ホリドッグ
素数であるかどうか見るのにアレだった。
def jg(t): i=2 if t==1 or t==0: return 0 while i**2<=t: if t%i==0: return 0 i+=1 return 1 n=int(raw_input()) chk=(1+n)*(n/2) if n%2: chk+=(n+1)/2 print 'WANWAN' if jg(chk) else 'BOWWOW'
n=2の時しか素数にならないらしいので総和も素数も何も調べずに print 'WANWAN' if input()==2 else 'BOWWOW'
で書けます。。
B - 道路工事
UnionFindの練習用?になるような問題っぽい??
class UnionFind: def __init__(self, size): self.rank=[0]*size self.par=range(size) self.g_num=size def find(self, x): if x==self.par[x]: return x self.par[x]=self.find(self.par[x]) return self.par[x] def same(self, x, y): return self.find(x)==self.find(y) def unite(self, x, y): x,y=self.find(x),self.find(y) if x==y: return self.g_num-=1 if self.rank[x]>self.rank[y]: self.par[y]=x else: self.par[x]=y if self.rank[x]==self.rank[y]: self.rank[y]+=1 def group_num(self): return self.g_num N,M=map(int,raw_input().split()) uf=UnionFind(N) for i in range(M): a,b=map(int,raw_input().split()) uf.unite(a-1,b-1) print uf.group_num()-1
はい。先日のパクリのUnionFindそのまま使って既にあるグループ数-1で全ての交差点が行けるようになる最小の道路数とした。これもう少し追記したいのですけど後でで...φ(・ω・`c⌒っ