csps2023t1求hack(图灵70洛谷100)
  • 板块学术版
  • 楼主spaceholder
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/10/24 18:05
  • 上次更新2023/11/2 11:34:28
查看原帖
csps2023t1求hack(图灵70洛谷100)
480416
spaceholder楼主2023/10/24 18:05
#include<bits/stdc++.h>
using namespace std;
int a[20];
int n,cnt; 
bool h[100010];
bool vis[100010];
int q[20];
int b[20];
int turnnum()
{
	int base=1;
	int op=0;
	for(int i=5;i>=1;--i) op+=base*b[i],base*=10;
	return op;
}
void go(int x)
{
	for(int i=5;i>=1;--i) b[i]=x%10,x/=10;
	for(int i=1;i<=5;++i) a[i]=b[i];
}
int main()
{
//	freopen("lock.in","r",stdin);
//	freopen("lock.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=5;++j) cin>>b[j];
		h[turnnum()]=1;
		q[i]=turnnum();
	}
	for(int i=0;i<=99999;++i)
	{
		go(i);
		for(int i=1;i<=n;++i) vis[q[i]]=0;
		int ans=0;
		for(int k=1;k<=5;++k)
		{
			for(int j=1;j<=5;++j)
			{
				b[j]=(a[j]-k+10)%10;
				int now=turnnum();
				if(h[now]&&!vis[now]) ans++,vis[now]=1;
				b[j]=(a[j]+k)%10;			
				now=turnnum();
				if(h[now]&&!vis[now]) ans++,vis[now]=1;
				b[j]=a[j];//recovery			 
			}
		}
		for(int k=1;k<=5;++k)
		{
			for(int j=1;j<=4;++j)
			{
				b[j]=(a[j]-k+10)%10;
				b[j+1]=(a[j+1]-k+10)%10;
				int now=turnnum();
				if(!vis[now]&&h[now]) ans++,vis[now]=1;
				b[j]=(a[j]+k)%10;	
				b[j+1]=(a[j+1]+k)%10;		
				now=turnnum();
				if(!vis[now]&&h[now]) ans++,h[now]=1;
				b[j]=a[j];//recovery		
				b[j+1]=a[j+1];	 
			}
		}
		if(ans==n) cnt++;
	}
	cout<<cnt;
	return 0;
} 
2023/10/24 18:05
加载中...