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

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

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

Codeforces Round #339 (Div.2)

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

A. Link/Cut Tree

ざっくりと大意

・lからrの区間のkの累乗数を出力する。

Python

l,r,k=map(int,raw_input().split())
t=f=0

while 1:
    tmp=k**t
    if l<=tmp<=r:
        f=1
        print tmp,
    elif tmp>r:
        break
    t+=1
if f==0:
    print -1

コンテスト当時はHack祭だった模様。lが最小、rが最大でのTLE狙いとrがkの累乗数と等しい場合の境界?の判定処理ミス狙いとかが成功していたのを見かけた。

B. Gena's Code

ざっくりと大意

・n国の戦車の\(a_i\)が戦闘に参加している。
・0始まりではなく1,0だけで構成されている数は美しい(但し、1は1回だけ。10のn乗の数ということになるはず)。
・美しくない数は削除されて残らない可能性がある??
・数列aの中には美しい数が少なくともn-1個以上あることが保証される(美しくない数は1つだけ含むか、aは全て美しい数になる。)

Python

n=raw_input()
#n,k=map(int,raw_input().split())
l=map(str,raw_input().split())
ans='1'
tmp=''
for i in l:
    if i=='0':
        print 0
        exit()
    elif i[0]=='1' and i.count('0')==len(i)-1:
        tmp+='0'*(len(i)-1)
    else:
        ans=i
print ans+tmp

数列aの中の全ての数の積が解になるのがよくわからない。。入力受取でintキャストはそれだけでTLEになるので駄目。出力するのは積だが、数列aの中にあるはずの10の累乗数は桁数、0の個数を文字列で保存しておいてaの中を全てチェックする。美しくない数があったならソレの末尾に保存しておいた0を付け足す。そうでなければ1の末尾に0を付け足す。どこかで0があった場合も例外で0を即時出力で終了できる。
例えば数列aが100 10 55 10だとしたら、0を2個保存、0を1個追加保存(合計3個)、55を例外保存、0を1個追加保存(合計4個)で最後に例外の55の末尾に4個の0を付け足すと解になる。