一眼模拟,然后改了好久都是WA的。
开始对拍,信息量巨大。第二到十组都错了,但那么大的文件根本看不出差异:
#include<iostream>
using namespace std;
const int N=5e5+10;
bool check_change(string s,string t)
{
int u=0;
for(int i=0;i<s.size();i++)
if(s[i]!=t[i]) u++; //有几个不相等的
return u==1;
}
int ans[N],sum;
const auto np=string::npos;
bool check_sub(string s,string t)
{
if(s.size()-1!=t.size()) return 0; //先判断长度关系
for(int i=0;i<s.size();i++)
{
if(s[i]!=t[i])
{
t.insert(i,"#"); //插入,使长度一样,方便后续判断
break;
}
}
return check_change(s,t);
}
int main()
{
int n; string t,s;
cin>>n>>t;
for(int i=1;i<=n;i++)
{
cin>>s;
if(s==t) ans[++sum]=i; //一样的字符串
else if(check_change(s,t)) ans[++sum]=i; //改一个字符
//t是s删一个字符或者t是s加一个字符
else if(check_sub(s,t)||check_sub(t,s)) ans[++sum]=i;
}
cout<<sum<<endl;
for(int i=1;i<sum;i++) cout<<ans[i]<<' ';
cout<<ans[sum];
return 0;
}