由于本人可能考虑不周,仅供参考。输出不应超过 114514 行,超过会导致下标越界。
如果对评测结果有异议,请在本帖at我反馈。P5918再等等。
@StudyingFather @mrsrz 希望采纳。
#include"testlib.h"
using namespace std;
string a[114514];
int n;
vector<int> tag;
int main(int argc,char** argv)
{
registerTestlibCmd(argc,argv);
n=inf.readInt();
a[0]=ouf.readWord();
for(int i=0;i<n;i++)
if(a[0][i]!='o' || a[0][i+n]!='*')
quitf(_wa,"Wrong on step 0");
if(a[0][n*2]!='-' || a[0][n*2+1]!='-')
quitf(_wa,"Wrong on step 0");
for(int i=1;;i++)
{
tag.clear();
a[i]=ouf.readWord();
if(a[i].size()!=2*n+2)
quitf(_wa,"Invalid string size line %d",i);
for(int j=0;j<a[i].size();j++)
if(a[i][j]!=a[i-1][j])
tag.push_back(j);
if(tag.size()!=4 || tag[2]-tag[1]==1 || tag[1]-tag[0]!=1 || tag[3]-tag[2]!=1)
quitf(_wa,"Invalid move %d",i);
if(a[i-1][tag[2]]=='-')
{
swap(tag[0],tag[2]);
swap(tag[1],tag[3]);
}
if(a[i][tag[2]]!='-' || a[i][tag[3]]!='-')
quitf(_wa,"Invalid move %d",i);
if(a[i][tag[0]]!=a[i-1][tag[2]] || a[i][tag[1]]!=a[i-1][tag[3]])
quitf(_wa,"Invalid move %d",i);
bool flag=1;
for(int j=2;j<2*n+2;j++)
if((j&1) && a[i][j]!='*' || (j&1)==0 && a[i][j]!='o')
flag=0;
if(flag)
quitf(_ok,"You finished it with %d steps!",i);
}
return 0;
}