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

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

Codeforces Beta Round #64

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

B. Text Messaging

expression parsing,greedy,strings

ざっくりと大意

・文字数制限のnと編集する?文字列が1行で与えられる。
・.?!いずれかでn文字を超えないタイミングで改行を難行で書けるか。

方針のようなもの

・先頭から見ていって.?!が出たら文字数を別途メモに加算して数え直し。
・さっきのメモと新たな数え分が制限数を越えたら改行だったことにして行数加算。
・制限数になるまではメモに文字数加算して新たに数えていく。
・最後の文字が丁度制限数の時など色々上手く調節出来ず自力では解けなかった。。。

358798のAlekseyさんをパクリ

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import time
import sys, io
import re, math
#start = time.clock()
n=int(raw_input())
#l=[int(x) for x in raw_input().split()]
text=re.split(r'[.?!]{1}[ ]?', raw_input())[:-1]
#print text
#Hello. I am a little walrus.
#['Hello', 'I am a little walrus']

chk=0
ans=1
for i in text:
#1要素が制限字数以上であると書き換えられないのでおしまい
    if len(i)>=n:
        print 'Impossible'
        sys.exit()
#chkメモと今回チェックの行を合わせて制限数を越えなければchkメモに加算
    if chk+len(i) + (1 if chk==0 else 2)<=n:
        chk+=len(i)+(1 if chk==0 else 2)
#改行加算
    else:
        ans+=1
        chk=len(i)+1
#    chk=0
print ans