题意:
又是一道枚举题。。
操作:
移动 影响的时钟 1 ABDE 2 ABC 3 BCEF 4 ADG 5 BDEFH 6 CFI 7 DEGH 8 GHI 9 EFHI
思路:
长考了好久,然后发现只需要进行枚举次数就好了,因为每个时钟来说它最多进行4次改变(1-2-3-0),所以对9个操作进行枚举,并且枚举它们分别被操作了几次,然后就好啦,就和熄灯问题一样,求出每个点的状态就好了。
#include<cstdio>
#include<cstring>
#include<map>
#include<set>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<iostream>
#include<time.h>
using namespace std;
typedef long ll;
typedef unsigned long ULL;
#define pi acos(-1.0)
#define Ex exp(1.0)
#define maxn 11
int a[maxn],mp[maxn];
int main(){
for(int i=1;i<=9;i++) scanf("%d",&a[i]);
int flag=0;
for(int i=0;i<=3;i++){ //1
for(int j=0;j<=3;j++){ //2
for(int k=0;k<=3;k++){ //3
for(int l=0;l<=3;l++){ //4
for(int m=0;m<=3;m++){ //5
for(int n=0;n<=3;n++){ //6
for(int o=0;o<=3;o++){ //7
for(int t=0;t<=3;t++){ //8
for(int q=0;q<=3;q++){ //9
mp[1]=(a[1]+i+j+l)%4;
mp[2]=(a[2]+i+j+k+m)%4;
mp[3]=(a[3]+j+k+n)%4;
mp[4]=(a[4]+i+l+m+o)%4;
mp[5]=(a[5]+i+k+m+o+q)%4;
mp[6]=(a[6]+k+m+n+q)%4;
mp[7]=(a[7]+l+o+t)%4;
mp[8]=(a[8]+m+o+t+q)%4;
mp[9]=(a[9]+n+t+q)%4;
sort(mp+1,mp+10);
if(mp[1]==mp[9]&&mp[1]==0){
int ff=0;
if(!ff&&i) {printf("1");ff=1;for(int p=1;p<i;p++) printf(" 1");}
else for(int p=0;p<i;p++) printf(" 1");
if(!ff&&j) {printf("2");ff=1;for(int p=1;p<j;p++) printf(" 2");}
else for(int p=0;p<j;p++) printf(" 2");
if(!ff&&k) {printf("3");ff=1;for(int p=1;p<k;p++) printf(" 3");}
else for(int p=0;p<k;p++) printf(" 3");
if(!ff&&l) {printf("4");ff=1;for(int p=1;p<l;p++) printf(" 4");}
else for(int p=0;p<l;p++) printf(" 4");
if(!ff&&m) {printf("5");ff=1;for(int p=1;p<m;p++) printf(" 5");}
else for(int p=0;p<m;p++) printf(" 5");
if(!ff&&n) {printf("6");ff=1;for(int p=1;p<n;p++) printf(" 6");}
else for(int p=0;p<n;p++) printf(" 6");
if(!ff&&o) {printf("7");ff=1;for(int p=1;p<o;p++) printf(" 7");}
else for(int p=0;p<o;p++) printf(" 7");
if(!ff&&t) {printf("8");ff=1;for(int p=1;p<t;p++) printf(" 8");}
else for(int p=0;p<t;p++) printf(" 8");
if(!ff&&q) {printf("9");ff=1;for(int p=1;p<q;p++) printf(" 9");}
else for(int p=0;p<q;p++) printf(" 9");
printf("\n");
flag=1;
break;
}
if(flag) break;
}
if(flag) break;
}
if(flag) break;
}
if(flag) break;
}
if(flag) break;
}
if(flag) break;
}
if(flag) break;
}
if(flag) break;
}
if(flag) break;
}
#ifndef ONLINE_JUDGE
system("pause");
#endif
}
/*
3 3 0
2 2 2
2 1 2
*/