该题最关键的是如何接收数据,想不明白之前,感觉这题真TM难,可想明白之后,。。。
好了。下面是思路:
用string类接收START之后,END之前的字符串,并存入容器中。
然后用==比较容器,如果相等,即数据一模一样,则AC
否则,将容器中的字符连起来,形成一个长字符,然后去除格式之后再比较string的大小
如果相等,则PE,否则WA。
千辛万苦终AC
#include<iostream>
#include<string>
#include<vector>
using namespace std;
//问题是怎么接收数据
void delete_space(string &str)//删除字符串的空格或者TAB
{
string::iterator iter = str.begin();
string::size_type index;
index = str.find(' ');
while(index != string::npos)
{
str.erase(iter+index);
index = str.find(' ');
}
index = str.find(9) ;//不知道为什么不能用‘ ’,所以用TAB的ascii码
while(index != string::npos)
{
iter = str.begin();
str.erase(iter+index);
index = str.find(9);
}
}
int main()
{
string str1;
//问题是怎么接收到字符串
int n;
cin>>n;
cin.get();
int i;
while(n--)
{
vector<string> vec1;
vector<string> vec2;
string str2;
string str3;
getline(cin,str1);//接收start
getline(cin,str1);//接收数据
while(str1!="END")//将数据全部存进容器中
{
vec1.push_back(str1);
getline(cin,str1);
}
getline(cin,str1);//同上
getline(cin,str1);
while(str1!="END")
{
vec2.push_back(str1);
getline(cin,str1);
}
if(vec1==vec2)//如果两个容器相等则AC
cout<<"Accepted"<<endl;
else
{
for(i=0;i!=vec1.size();++i)
{
str2+=vec1[i];
}
for(i=0;i!=vec2.size();++i)
{
str3+=vec2[i];
}
delete_space(str2);//去除格式
delete_space(str3);
if(str2 == str3)//去除格式后,如果相等,则PE
cout<<"Presentation Error"<<endl;
else//否则wa
cout<<"Wrong Answer"<<endl;
}
}
}
START
goodtime
END
START
good
time
END
说一下这组数据
本来我的程序是没有将字符串连成一个大字符串,而是去除空串和把每个元素去除格式。
然后比较两个容器的大小,如果相等,则PE
但是我发现了这组测试数据,
才让我从万恶的WA中走出来
*/