最近在写CCF,写文章既做督促又做纪念吧
CCF-20200603
这题目本身没有问题,但由于我对题意的错解导致出现问题
主要问题是:开始的连续空格行应该被忽略而不计入
由于这个问题一直出现问题,希望下次注意
附上AC代码如下
#include<bits/stdc++.h>
using namespace std;
void eraseSpace(string &s)
{ // 去除空格
s.erase(0, s.find_first_not_of(" "));
s.erase(s.find_last_not_of(" ")+1, s.size());
}
int main()
{
ios::sync_with_stdio(false); //提高运行速度
int flag=-1,newline=1,X_line=0,N_line=-1,W;
string str;
cin>>W;
getline(cin,str);
flag=-1;
while(!cin.eof())
{
getline(cin,str);
if(str.find_first_not_of(" ")==str.npos)
{
X_line=0;
newline=1;
flag=0;
}
else if(str.find("* ")==0)
{
if(flag==3||flag==0)N_line++;
N_line++;
newline=0;
X_line=0;
str.erase(0,2);
//处理空格
eraseSpace(str);
// 处理行
while(str.length()+X_line>=W-3)
{
str.erase(0,W-X_line-3);
while(str[0]==' '){str.erase(0,1);}
X_line=0;
if(newline==1)N_line++; //该行是否计数
newline=1;
}
// 空格连接行
if(str.length()!=0)
{
X_line=str.length()+X_line+1;
if(newline==1)
{ //该行未计数
N_line++;
newline=0;
}
}
flag=1;
}
else if(str.find(" ")==0&&(flag==1||flag==2))
{
str.erase(0,2);
//处理空格
eraseSpace(str);
// 处理行
while(str.length()+X_line>=W-3)
{
str.erase(0,W-X_line-3);
while(str[0]==' '){str.erase(0,1);}
X_line=0;
if(newline==1)N_line++;
newline=1;
}
// 空格连接行
if(str.length()!=0)
{
X_line=str.length()+X_line+1;
if(newline==1)
{
N_line++;
newline=0;
}
}
flag=2;
}
else
{
if(flag!=3)
{
N_line++;
newline=1;
X_line=0;
}
//处理空格
eraseSpace(str);
// 处理行
while(str.length()+X_line>=W)
{
str.erase(0,W-X_line);
while(str[0]==' '){str.erase(0,1);}
X_line=0;
if(newline==1)N_line++;
newline=1;
}
// 空格连接行
if(str.length()!=0)
{
X_line=str.length()+X_line+1;
if(newline==1)
{
N_line++;
newline=0;
}
}
flag=3;
}
}
cout<<N_line<<endl;
return 0;
}