自省一下
查看原帖
自省一下
964563
Anemo_Slime楼主2023/11/3 19:45

害,第一次打普及和提高一起,真的不知道在干什么。。。真正考试的时候比平常慌好多,各种犯傻,普及没开longlong啥的,这道题写了几个样例发现都可以就直接跑了,结果少了个细节,甚至把n=1的可以特判都注释掉了

希望之后的oi生涯(但愿还有)能够吸取教训吧

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define F(x,y,z) for(int x=y;x<=z;x++)
#define N 11
int n,a[N][6],ans,vis[N];
bool distance(int a,int b,int x,int y){
	int a1=a-b,a2=a-b+10;
	int b1=x-y,b2=x-y+10;
	if(a1==b1||a1==b2||/*a2==b1这里写上了就ac了*/) return 1; 
	return 0;
}
void dfs(int pos){
	if(pos>=6){

		F(i,1,n){
			int flag=0,same=0;
			F(j,1,5){			
				if(vis[j]==a[i][j]) same++;	
				if(vis[j]!=a[i][j]&&vis[j+1]!=a[i][j+1]&&j<=4){
					if(distance(vis[j],vis[j+1],a[i][j],a[i][j+1])){
						flag++;j++;
					}
					else return;
				}
				else{
					if(vis[j]!=a[i][j]) flag++;
				}
				if(flag==2){
					return;	
				}  
			}
			if(same==5) return;
		}
//			for(int i=1;i<=5;i++){
//			cout<<vis[i]<<" ";
//		}
//		cout<<endl;
		ans++;
		return;
	}
	F(i,0,9){
		vis[pos]=i;
		dfs(pos+1);
		vis[pos]=-1;
	}
}
signed main(){
//	freopen("lock.in","r",stdin);
//	freopen("lock.out","w",stdout);
	memset(vis,-1,sizeof(vis));
	cin>>n;
	F(i,1,n){
		F(j,1,5) {
			cin>>a[i][j];
		}
	}
	
//	if(n==1){
//		ans=81;
//	}
//	else{
		dfs(1);
//	}
	cout<<ans;
	/*
	
	

	*/
}
2023/11/3 19:45
加载中...