害,第一次打普及和提高一起,真的不知道在干什么。。。真正考试的时候比平常慌好多,各种犯傻,普及没开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;
/*
*/
}