poj(1166)——拨钟问题

题意:

又是一道枚举题。。

9个整数,表示各时钟指针的起始位置,相邻两个整数之间用单个空格隔开。其中,0=12点、1=3点、2=6点、3=9点。 输出 输出一个最短的移动序列,使得9个时钟的指针都指向12点。按照移动的序号从小到大输出结果。相邻两个整数之间用单个空格隔开。

操作:

移动    影响的时钟
 
 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
#include
#include
#include
#include
#include
#include
#include
#include
#include
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


你可能感兴趣的:(模拟题)