关于昨晚ABC C题
  • 板块学术版
  • 楼主tin_ingot
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/10/15 13:04
  • 上次更新2023/11/2 13:41:23
查看原帖
关于昨晚ABC C题
553188
tin_ingot楼主2023/10/15 13:04

一眼模拟,然后改了好久都是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;
}
2023/10/15 13:04
加载中...