首页 > 代码库 > POJ 1166 The Clocks (暴搜)
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("\n"); } } }
由于是
1 ABDE 2 ABC 3 BCEF 4 ADG 5 BDEFH 6 CFI 7 DEGH 8 GHI 9 EFHI
从而枚举全部操作,并且这里每一个操作不会超过4次。由于四次后跟0次的效果是一样的。
POJ 1166 The Clocks (暴搜)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。