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

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

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

MemSQL start[c]up Round 2

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

A. Banana

ざっくりと大意

・1シート毎にnだけステッカーがある??
・n文字の同じステッカーを複数枚購入して文字列sを作る??

方針のようなもの

・sで必要な文字種類の数がnより大きければ-1。
・sで必要な文字種類の数がnと同じならば1文字ずつ使って、最も回数が多く使用されているものの分だけシートを使う。
・それ以外の場合が難しい。。。(文字列sでの出現回数+シートでの出現回数-1)/シートでの出現回数 とかでシート数がより多く必要になるかもしれない文字を優先して使うようにして色々丁寧に書けば・・・

s=raw_input()
n=input()
l=[0]*26
ans=''
for i in s:
    if i not in ans:
        ans+=i
    else:
        l[ord(i)-97]+=1
if len(ans)>n:
    print -1
elif len(s)==n:
    print 1
    print s
else:
    chk=n-len(ans)
    while 1:
        if chk==0 or sum(l)==0:break
        mc=mi=0
        for i in range(26):
            ct=ans.count(chr(i+97))
            if ct:
                k=(s.count(chr(i+97))+ct-1)/ct
                if k>mc:
                    mc=k
                    mi=i
        if mc>0:
            ans+=chr(mi+97)
            l[mi]-=1
            chk-=1
    c=k=1
    for i in range(26):
        if l[i]>0:
            kari=ans.count(chr(i+97))
            c=max(c,(s.count(chr(i+97))+kari-1)/kari)
    print c
    print ans if len(ans)==n else ans+'a'*(n-len(ans))

色々丁寧に書くのが大変だった。寝る前に計13回のWAやREで撃沈してたのが起きたら修正一発解決だったんですけど。。。