Codeforces Beta Round #27 (Codeforces format, Div. 2)
はい。
http://codeforces.com/contest/27
A. Next Test
implementation,sortings
ざっくりと大意
・与えられた数列に含まれていないより最小の数を求める??
方針のようなもの
・とりあえずソートするけど、1が含まれてなければ1が最小。
・左0番目と1番目を比較して、差が2以上なら左0番目に1を足して回答。
差が1ならばdelしてforループ。遂に最後の数になってしまったら1を足して回答。
#!/usr/bin/env python # -*- coding: UTF-8 -*- import time import sys, io import re, math start = time.clock() n=input() l=map(int, raw_input().split()) l.sort() def main(): for i in range(n): if l[0]==sum(l): print l[0]+1 break elif l[0]==(l[1]-1): del l[0] else: print l[0]+1 break if __name__=='__main__': if min(l)!=1: print '1' else: print 'm' main()
まぁわざわざdelしなくてもforループで自然に右に見ていけるのでそれでも良かったかもしれない。
はい、まぁ一行でも出来たそうです。
313289のlyricsさん。
print min( set(range(1,input()+2))-set(map(int,raw_input().split())) )
まぁ特殊な例すぎるようなアレです。
B. Tournament
bitmasks,brute force,dfs and similar
ざっくりと大意
・より早く眠ったものが勝者の大会?引き分けは存在しない。
方針のようなもの
・解読できず勘で
・nが4だと1から4まで(4-1)回ずつ使えてるっぽい。
#!/usr/bin/env python # -*- coding: UTF-8 -*- import time import sys, io import re, math start = time.clock() n=int(raw_input()) x=(n*(n-1)/2)-1 l,ans=[],[] #l=[map(int, raw_input().split()) for _ in range(n)] for _ in range(x): # a=raw_input(' ') (a,b)=map(int, raw_input().split()) l.append(a) l.append(b) #print l for i in range(1,n+1): if l.count(i)!=(n-1): ans.append(i) if len(ans)==2: break print ans[0],ans[1]
WAのTest7も使ってる数は違っておらず左右が入れ違ってるだけ。 何か何かが勝ち負けで判定すべき要素があるらしい。。。問題を解読できていないまま悩んだり放置は無駄なので書き方が近かったlyricsさんをパクって提出で通す。
#!/usr/bin/env python # -*- coding: UTF-8 -*- import time import sys, io import re, math start = time.clock() n=int(raw_input()) x=(n*(n-1)/2)-1 win=[0 for _ in range(n+1)] lose=[0 for _ in range(n+1)] for _ in range(x): # a=raw_input(' ') (a,b)=map(int, raw_input().split()) win[a]+=1 lose[b]+=1 ans=[] for i in range(1,n+1): if win[i]+lose[i]==n-2: ans.append(i) if len(ans)==2: break #print ans[1],ans[0] if win[ans[0]]<win[ans[1]] else ans[0],ans[1] if win[ans[0]]<win[ans[1]]: print ans[1],ans[0] else: print ans[0],ans[1]