题目地址 http://poj.org/problem?id=1176
题目描述
在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码。 这些灯都连接到四个按钮:

按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮。

按钮2:当按下此按钮,将改变所有奇数号的灯。

按钮3:当按下此按钮,将改变所有偶数号的灯。

按钮4:当按下此按钮,将改变所有序号是3*K+1(K>=0)的灯。例如:1,4,7…

一个计数器C记录按钮被按下的次数。当宴会开始,所有的灯都亮着,此时计数器C为0。

你将得到计数器C(0<=C<=10000)上的数值和经过若干操作后某些灯的状态。写一个程序去找出所有灯最后可能的与所给出信息相符的状态,并且没有重复。

输入输出格式
输入格式:
不会有灯会在输入中出现两次。

第一行: N。

第二行: C最后显示的数值。

第三行: 最后亮着的灯,用一个空格分开,以-1为结束。

第四行: 最后关着的灯,用一个空格分开,以-1为结束。

输出格式:
每一行是所有灯可能的最后状态(没有重复)。每一行有N个字符,第1个字符表示1号灯,最后一个字符表示N号灯。0表示关闭,1表示亮着。这些行必须从小到大排列(看作是二进制数)。

如果没有可能的状态,则输出一行’IMPOSSIBLE’。

输入输出样例
输入样例#1:
10
1
-1
7 -1
输出样例#1:
0000000000
0101010101
0110110110
说明
在这个样例中,有三种可能的状态:

所有灯都关着

1,4,7,10号灯关着,2,3,5,6,8,9亮着。

1,3,5,7,9号灯关着,2, 4, 6, 8, 10亮着。

翻译来自NOCOW

USACO 2.2
讲真的这个翻译真不咋地,之前用过别的方法做过这个题目,咱们现放开超时,优化策略,先分析这个题目,题目是给了这四种操作,让你找到这四种操作能够达成符合条件的类型是哪几种,明显搜索题,但是这里有两个思想一定要明白,也是这道题的关键所在:
1.搜索上限,当搜索次数达到一定数量之后,已经搜索出所有结果,没必要在继续进行搜索,这个思想不仅是搜索,有时候二分也会用到这个思想。
2.重复性,结果具有规律,通过这个规律可以对某简单结果进行扩展的到正确答案。
比如在这个题目中其实四位数足以表示所有情况,但是我为了保险还使用了6位,但是这并没有太大的区别,考虑四位数,当对四位数变换超过6次时必然出现重复结果,虽然不知道最少变换几次,但是6次已经够少了。
虽然代码写的比较丑,比较长,但是思路明确纯搜索写法。

#include<iostream>#include<map>#include<set>#include<vector>#include<cstring>using namespace std;set<int> kai;set<int> guan;char flag[7];set<string> ob;int n=6,q,cc=-1,yy;int op1(char *a,char* b);int op2(char *a,char* b);int op3(char *a,char* b);int op4(char *a,char* b);void dfs(char *a,int w){if(w==q){// cout<<a<<endl;for(auto i=kai.begin();i!=kai.end();i++){if(a[*i]!='1') return ;}for(auto i=guan.begin();i!=guan.end();i++){if(a[*i]!='0') return ;}string temp;temp.clear();int t=0;for(int i=0;i<yy;i++){temp.push_back(a[t]);t++;if(t==6) t=0;}ob.insert(temp);return;}char tem[7];op1(a,tem);dfs(tem,w+1);op2(a,tem);dfs(tem,w+1);op3(a,tem);dfs(tem,w+1);op4(a,tem);dfs(tem,w+1);}int main(){fill(flag,flag+7,'1');int m=1,x=1,cc=-1;cin>>yy>>q;if(q>6) q=6;kai.clear();guan.clear();while(m!=-1){cin>>m;if(m==-1) break;m=(m-1)%6;kai.insert(m);}while(x!=-1){cin>>x;if(x==-1) break;x=(x-1)%6;guan.insert(x);}dfs(flag,0);if(ob.size()==0){cout<<"IMPOSSIBLE"<<endl;return 0;}for(set<string> ::iterator po=ob.begin();po!=ob.end();po++)cout<<*po<<endl;}int op1(char *a,char* b){for(int i=0;i<=n;i++){if(a[i]=='0') b[i]='1';else b[i]='0';}return 0;}int op2(char *a,char* b){for(int i=0;i<=n;i++){if(i%2==1){if(a[i]=='0') b[i]='1';else b[i]='0';}else b[i]=a[i];}return 0;}int op3(char *a,char* b){for(int i=0;i<=n;i++){if(i%2==0){if(a[i]=='0') b[i]='1';else b[i]='0';}else b[i]=a[i];}return 0;}int op4(char *a,char* b){for(int i=0;i<=n;i++){if(i%3==0){if(a[i]=='0') b[i]='1';else b[i]='0';}else b[i]=a[i];}return 0;}

POJ 1176 Party Lamps USACO 2.2 派对灯(搜索)相关推荐

  1. ios numlock_从“提示”框:默认情况下启用NumLock,无广告的iOS应用和立体声供电的派对灯...

    ios numlock Once a week we round up some of the great tips readers have sent into the tip box. This ...

  2. P1468 派对灯 Party Lamps(BIG 模拟)

    题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄 ...

  3. CODEVS-2050 派对灯

    2017-6-8 题目描述 给你n盏开着的灯,开关的次数,以及部分灯最后的状态,求出所有可能的情况 解答 史上最长的代码 同一个按钮按奇数次都是一样的,按偶数次也都是一样的 代码 #include&l ...

  4. Catch That Cow POJ - 3278 [kuangbin带你飞]专题一 简单搜索

    Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. ...

  5. BZOJ 3891 USACO 2014 Dec Piggy Back 搜索 最短路

    第一个人从1出发边权A,第二个人从2出发边权B,走到一起边权C,求最短方案使两人走到n. 分别从1,2,n跑一次最短路,然后枚举走到一起的点计算答案即可. 没开快速读入 104ms,开快速读入84ms ...

  6. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  7. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  8. 【POJ 3322】 Bloxorz I

    [题目链接] http://poj.org/problem?id=3322 [算法] 广度优先搜索 [代码] #include <algorithm> #include <bitse ...

  9. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

最新文章

  1. 2021年大数据ELK(三):Lucene全文检索库介绍
  2. SUN平台,光纤共享存储互斥失败导致的数据灾难恢复
  3. 网络推广外包——网络推广外包如何在搜索引擎中体现关键词优化效果
  4. 计算机辅助教学导学设计研究,《计算机辅助教学》实验报告
  5. ip登录打印机怎么打印_不要打印,登录。
  6. 效率低的日子怎么办?
  7. contentsiz contentoffset contentInset的区别
  8. 帧传送、关联与身份验证状态
  9. spring cloud中微服务之间的调用以及eureka的自我保护机制
  10. Cesium:去除原生自带绿色选择框
  11. 多变量微积分笔记19——直角坐标系和柱坐标系下的三重积分
  12. winform中HSrollbar如何控制thumb滑块的宽度呢
  13. linux搭建认证服务器,Linux上搭建FreeRadius服务器
  14. 免费GB网络硬盘|网盘|网络U盘|最好的免费网络硬盘|赚钱网盘
  15. kubesphere K8S Kubeedge 安装配置菜鸟级指导
  16. 百度网盘限速的2个解决小办法
  17. RMQ与SparseTable(ST表)
  18. Springboot餐饮点餐系统毕业设计源码301749
  19. 林奕含《房思琪的初恋乐园》全文/原文
  20. SiC功率半导体产业高峰论坛成功举办

热门文章

  1. site_url()和base_url()
  2. 安装TCExam经验
  3. 数据结构——图的深度遍历
  4. XenApp_XenDesktop_7.6实战篇之十六:安装Virtual Delivery Agent For Windows Server OS
  5. 面向对象和面向过程的区别个人觉得是目前解释最好的
  6. 沈南鹏:从五大物理定律看新商业法则
  7. 巧妙设备MTU的大小,轻松提网速
  8. 可执行jar包的MANIFEST.MF
  9. 这年头,胡萝卜也靠不住了
  10. ios 横向滚轮效果_ios横向菜单+页面滑动