Codeforces Beta Round #25 (Div. 2 Only)
はい。
http://codeforces.com/contest/25
A. IQ test
brute force
ざっくりと大意
・BobはIQテストの事前準備をしている? ・n個の数の中に平等でないものがある?
方針のようなもの
・set型にして2個しか残らなかったら元のリストで1個だけのほうが仲間はずれ。 ・素数のリストを予めてきとーに37まで用意して、リストにしてあるテストケースの数を先頭から割り切れたものと割り切れなかったもので振り分けて最後にどちらかの要素数が1なら仲間はずれ発見に成功かな?
#!/usr/bin/env python # -*- coding: UTF-8 -*- import time import sys, io import re, math start = time.clock() n=input() l=list(map(int, raw_input().split())) s=[2,3,5,7,11,13,17,19,23,29,31,37] chk=set(l) li=list(chk) if len(chk)==2: a=l.count(li[0]) b=l.count(li[1]) print(l.index(li[0])+1) if a<b else (l.index(li[1])+1) else: while 1: for i in s: a,b=[],[] for j in l: a.append(j) if j%i==0 else b.append(j) if len(a)==1 or len(b)==1: break if len(a)==1 or len(b)==1: break print l.index(a[0])+1 if len(a)==1 else l.index(b[0])+1
んんーんー、慎重にするつもりだったら素数リストはいくつまで必要であるかそうでないか考える・判断するべきだったんだろう・・・
与えられる数が100までらしいっぽいので47までは必要だったんじゃなかろうか。。。
例えば47と94がずっと交互に並んでて最後だけ違う数とかだと47で割り切れるか基準では仲間はずれが発見できなかったような。。。
と思いながら他の方の回答を拝見しに行ったら、テストケースを確認したら・・・・2で割り切れるかだけで行けたっぽい様子・・・
bit演算判定を使いながら短く書いた2524636のdaidailanlanさんが安定して凄い。
input() a = [int(x) & 1 for x in raw_input().split()] print a.index(a.count(0) > 1) + 1
解法や書き方などが他の問題でも似た傾向であろうことを期待して、ワザと同じ人を選択してピックアップしてます。はい。
B. Phone numbers
ざっくりと大意
・2,3桁区切りで電話番号にする??
方針のようなもの
・2,3ならそのまま出力、あとは長さが偶数か奇数かの時だけちょっと気をつければいい気がする。
n=int(raw_input()) w=list(raw_input()) ans='' if n<=3: print ''.join(w) else: chk=0 if n%2==1: ans+=w.pop(0) while len(w): if chk%2==0 and chk!=0: ans+='-' ans+=w.pop(0) chk+=1 print ans
長さが奇数なら最初に3桁にして後はずっと2桁区切り、偶数ならずっと2桁区切りで大丈夫だった。