• POJ 1166 The Clocks (暴搜)


    发现对这样的模拟题根本没啥思路了,本来准备用bfs的。可是结果超时了,这是參考别的人代码写的:

    #include <stdio.h>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <map>
    #include <vector>
    #include <math.h>
    #include <string.h>
    #include <queue>
    #include <string>
    using namespace std;
    
    int main()
    {
        int a[10],b[10],c[10];
        freopen("1166.in","r",stdin);
        for(int i = 1; i <= 9; i++)
            scanf("%d",&a[i]);
        for(b[9]=0;b[9]<=3;++b[9])
            for(b[8]=0;b[8]<=3;++b[8])
                for(b[7]=0;b[7]<=3;++b[7])
                    for(b[6]=0;b[6]<=3;++b[6])
                        for(b[5]=0;b[5]<=3;++b[5])
                            for(b[4]=0;b[4]<=3;++b[4])
                                for(b[3]=0;b[3]<=3;++b[3])
                                    for(b[2]=0;b[2]<=3;++b[2])
                                        for(b[1]=0;b[1]<=3;++b[1])
                                        {
                                            c[1]=(a[1]+b[1]+b[2]+b[4])%4;//钟1的状态
                                            c[2]=(a[2]+b[1]+b[2]+b[3]+b[5])%4;//钟2的状态
                                            c[3]=(a[3]+b[2]+b[3]+b[6])%4;//钟3的状态
                                            c[4]=(a[4]+b[1]+b[4]+b[5]+b[7])%4;//钟4的状态
                                            c[5]=(a[5]+b[1]+b[3]+b[5]+b[7]+b[9])%4;//钟5的状态
                                            c[6]=(a[6]+b[3]+b[5]+b[6]+b[9])%4;//钟6的状态
                                            c[7]=(a[7]+b[4]+b[7]+b[8])%4;//钟7的状态
                                            c[8]=(a[8]+b[5]+b[7]+b[8]+b[9])%4;//钟8的状态
                                            c[9]=(a[9]+b[6]+b[8]+b[9])%4;//钟9的状态
                                            if(c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]==0)//所有就位
                                            {
                                                for(int i=0;i<b[1];++i)printf("1 ");
                                                for(int i=0;i<b[2];++i)printf("2 ");
                                                for(int i=0;i<b[3];++i)printf("3 ");
                                                for(int i=0;i<b[4];++i)printf("4 ");
                                                for(int i=0;i<b[5];++i)printf("5 ");
                                                for(int i=0;i<b[6];++i)printf("6 ");
                                                for(int i=0;i<b[7];++i)printf("7 ");
                                                for(int i=0;i<b[8];++i)printf("8 ");
                                                for(int i=0;i<b[9];++i)printf("9 ");
                                                printf("
    ");
                                            }
                                        }
    }
    

    由于是

     1         ABDE
    
     2         ABC
    
     3         BCEF
    
     4         ADG
    
     5         BDEFH
    
     6         CFI
    
     7         DEGH
    
     8         GHI
    
     9         EFHI    
    

    那么对于第一个钟来说,可以让他状态变化的是操作1和2和4,别的钟类似作法。

    从而枚举全部操作,并且这里每一个操作不会超过4次。由于四次后跟0次的效果是一样的。

  • 相关阅读:
    Marshal Code Into Another Thread(STAThread)
    MongoDB分片实战(二):Sharding
    项目中如何添加CorePlot开源框架(重温Xcode链接静态库)
    Xcode4.2中将Three20开源库导入到工程项目中
    Ajax在MVC中的使用
    位枚举的学习
    MVC3+NHibernate项目实战(二) :数据库访问层
    MVC3+NHibernate项目实战(一) :项目设计
    Android VideoView
    00设计原则
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6950946.html
Copyright © 2020-2023  润新知