关于该代码时间复杂度是否可过ccf评测机
查看原帖
关于该代码时间复杂度是否可过ccf评测机
324226
X2H_tato楼主2024/12/1 14:49

rt

代码是假的,思路源于我贪心写假了之后发现多贪几遍可以大概率得到正确答案,差不多1e8的复杂度

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N],b[N],lima[N],limb[N];
void swa (int &a,int &b)
{
	int c=a;
	a=b,b=c;
}

void dg (int s,int n)
{
	if(s>100) return ;
	for(int i=1;i<n;i++)
	{
		if(a[i]!=b[i])
		{
			if(lima[i]&&lima[i+1]&&a[i+1]==b[i]) swa(a[i+1],a[i]);
			if(limb[i]&&limb[i+1]&&b[i+1]==a[i]) swa(b[i],b[i+1]);
		}
	}
	for(int i=n;i>1;i--)
	{
		if(a[i]!=b[i])
		{
			if(lima[i]&&lima[i-1]&&a[i-1]==b[i]) swa(a[i-1],a[i]);
			if(limb[i]&&limb[i-1]&&b[i-1]==a[i]) swa(b[i],b[i-1]);
		}
	}
	dg(s+1,n);
}

int main()
{
	//freopen("a.in","r",stdin);
	//freopen("a.out","w",stdout);
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		scanf("%d",&n);
		for(int i=1;i<=n;i++) scanf("%1d",&a[i]);
		for(int i=1;i<=n;i++) scanf("%1d",&b[i]);
		for(int i=1;i<=n;i++) scanf("%1d",&lima[i]);
		for(int i=1;i<=n;i++) scanf("%1d",&limb[i]);
		dg(1,n);
		int ans=0;
		for(int i=1;i<=n;i++)
			ans+=(a[i]==b[i]);
		printf("%d\n",ans);
	}
	return 0;
}
2024/12/1 14:49
加载中...