求助!自测AC但是洛谷只有20分
查看原帖
求助!自测AC但是洛谷只有20分
549070
cfish楼主2022/8/20 10:04

下附代码

#include<bits/stdc++.h>
using namespace std;
const int MN=80005;
int a[MN][10],cnt[MN][10],xy[10],vis[10];
bool check(int x,int y)
{
	for(int i=1;i<=4;i++)
		if(cnt[x][i]!=cnt[y][i])
			return false;
	int cnt1=0;
	memset(xy,0,sizeof(xy));
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=8;i++)
		if(a[x][i]!=a[y][i])
		{
			cnt1++;
			xy[cnt1]=i;
		}
	if(cnt1>4||cnt1%2!=0)
		return false;
	else
	{
		int tem=cnt1;
		for(int i=1;i<=tem;i++)
			for(int j=i+1;j<=tem;j++)
			{
				if((a[x][xy[i]]==a[y][xy[j]]&&a[x][xy[j]]==a[y][xy[i]])&&(vis[i]==0&&vis[j]==0))
				{
					cnt1-=2;
					vis[i]=vis[j]=1;
				}
				if(cnt1==0)
					return true;
			}
	}
	
}
int main()
{
	int n;
	char tem;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=8;j++)
		{
			tem=getchar();
			while(tem<'A'||tem>'Z')
				tem=getchar();
			switch(tem)
			{
				case 'A':a[i][j]=1,cnt[i][1]++;
						break;
				case 'T':a[i][j]=2,cnt[i][2]++;
						break;
				case 'C':a[i][j]=3,cnt[i][3]++;
						break;
				case 'G':a[i][j]=4,cnt[i][4]++;
						break;
			}
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++)
		for(int j=i+1;j<=n;j++)
		{
			if(check(i,j))
				ans++;
		}
	cout<<ans<<endl;
	return 0;
}
2022/8/20 10:04
加载中...