感谢楼上的同学提出修改意见!
这题其实只是一道简单的模拟。我觉得难度最好是 普及-。
先是输入数据。想说一点:
输入整数后,如果下面要 getline 输入字符串,要用
xxxxxxxxxx
cin.get();
把换行符吃掉。
建立一个动态数组/链表/ vector
遍历一遍
现在,我们令变量
让下标
xxxxxxxxxx
cnt+=a[i]+1;
否则另起一条短信:
xxxxxxxxxx
ans++;
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