1. 程式人生 > 其它 >CF70B Text Messaging 題解

CF70B Text Messaging 題解

CF70B Text Messaging 題解

Content

有一個簡訊軟體最多隻能夠上傳長度為 \(n\) 的訊息。現在你有一段話,但不一定能夠一次發出。這段話由若干句話組成,以 .? 或者 ! 為結尾。你不能夠將一句話拆開來發,但是如果容量允許,你可以將幾句話合併起來發送。求最少需要傳送幾次。

請注意,同時傳送多句話時句與句之間要加上一個空格

資料範圍:\(2\leqslant n\leqslant 255\)

Solution

我們將每句話分開來儲存,然後一個一個加進去,碰到有一句話超過了 \(n\) 就肯定不可能了,否則放進去儘量多的句子,直到不能夠再加進去再一次記錄答案。

Code

int n, cnt = 1, iee, ans;
string all;
struct sentences {
	int len;
	string s;
}a[257];

int main() {
	getint(n);
	getline(cin, all);
	int alllen = all.size();
	_for(i, 0, alllen - 1) {
		if((all[i] == '.' || all[i] == '?' || all[i] == '!') && i != alllen - 1)	a[cnt++].s += all[i++];
		else	a[cnt].s += all[i];
	}
	_for(i, 1, cnt)	{
		a[i].len = a[i].s.size();
		if(iee + a[i].len + (iee ? 1 : 0) > n) {
			if(!iee || a[i].len > n)	return printf("Impossible"), 0;
			else	ans++, iee = 0;
		} 
		iee += a[i].len + (iee ? 1 : 0);
	}
	printf("%d", ans + 1);
	return 0;
}