CF70B Text Messaging 題解
阿新 • • 發佈:2021-12-17
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; }