CF70B Text Messaging
题目描述
小海象 Fangy 和所有的现代海象一样,喜欢通过短信进行交流。一天,他遇到了以下问题:当他发送很长的文本时,短信会被拆分成每条包含 $n$ 个字符的部分(即一条短信的大小)。这样一来,完整的句子和单词就会被拆分!
Fangy 不喜欢这样,所以他决定自己手动将文本拆分成最少的短信,使得当短信被发送时,没有一个句子会被拆分成多条短信,并且短信总数最少。如果两个连续的句子位于不同的短信中,它们之间的空格可以省略(Fangy 不会写下这个空格)。
小海象的文本格式如下:
```
TEXT ::= SENTENCE | SENTENCE SPACE TEXT
SENTENCE ::= WORD SPACE SENTENCE | WORD END
END ::= {'.', '?', '!'}
WORD ::= LETTER | LETTER WORD
LETTER ::= {'a'..'z', 'A'..'Z'}
SPACE ::= ' '
```
SPACE 代表空格符号。
那么,Fangy 需要发送多少条短信?
输入格式
第一行包含一个整数 $n$,表示一条短信可容纳的字符数($2\leq n\leq255$)。
第二行包含 Fangy 要发送的文本,文本长度不超过 $10^4$ 个字符。题目保证输入的文本格式满足上述描述。特别地,这意味着文本不为空。
输出格式
输出一个整数,表示 Fangy 需要发送的短信数量。如果无法分割文本,则输出 “Impossible” (不带引号)。
说明/提示
我们来看看第三个样例。文本将被拆分为三条短信:“Hello!”,“Do you like fish?” 和 “Why?”。
由 ChatGPT 5 翻译