感谢楼上的同学提出修改意见!
这题其实只是一道简单的模拟。我觉得难度最好是 普及-。
先是输入数据。想说一点:
输入整数后,如果下面要 getline 输入字符串,要用
xxxxxxxxxxcin.get();把换行符吃掉。
建立一个动态数组/链表/ vector
遍历一遍
现在,我们令变量
让下标
xxxxxxxxxxcnt+=a[i]+1;否则另起一条短信:
xxxxxxxxxxans++;cnt=a[i];至于为什么第一种情况要有一个 "+1",只是因为题目中有详细的要求:
注:每两句话叠加在一起要多一个空格
最后输出
千万不要抄,小心棕名!
xxxxxxxxxx// 70B Text Messaging using namespace std;
bool isDigit(char c) { return c=='.' || c=='?' || c=='!';}
int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin>>n; cin.get(); string s; getline(cin, s); //cout<<s; int cnt=0; vector<int> a; for(int i=0; i<s.size(); i++) { if(s[i]==' ') { if(i>0 && isDigit(s[i-1])) continue; } cnt++; if(isDigit(s[i])) { a.push_back(cnt); cnt=0; } } /* for(int i=0; i<a.size(); i++) cout<<a[i]<<" "; cout<<endl; */ for(int i=0; i<a.size(); i++) if(a[i]>n) { cout<<"Impossible"; return 0; } cnt=a[0]; int ans=1; for(int i=1; i<a.size(); i++) { if(cnt+a[i]+1<=n) cnt+=a[i]+1; else { ans++; cnt=a[i]; } } cout<<ans;
return 0;}
All Rights Reserved 2022 Wang Zhanrui