USACO 2.2.4 Party Lamps
2015-10-01 14:07
351 查看
注意有状态重复,所以实际需要统计的状态并不多
以及有效按钮数<=4
以及有效按钮数<=4
#include <iostream> #include <fstream> #include <string> #include <algorithm> //#define LOCAL using namespace std; #ifdef LOCAL ofstream fout ("out.txt"); ifstream fin ("in.txt"); #else ofstream fout ("lamps.out"); ifstream fin ("lamps.in"); #endif int res[1<<10]; // save the state int num_on = 0; int num_off = 0; int on[10]; int off[10]; int used[1000]; int num_light; int num_change; int num_res = 0; int change1(int s) { s = s^((1<<6)-1); return s; } int change2(int s) { s = s^(052); return s; } int change3(int s) { s = s^(025); return s; } int change4(int s) { s = s^(044); return s; } int max_s = -1; bool check(int state) { //max_s = max(max_s, state); if(used[state]==1) return 0; for (int i = 0; i < num_on; ++i) { if((state&(1<<(6 - on[i])))==0) return 0; } for (int i = 0; i < num_off; ++i) { if((state&(1<<(6 - off[i])))!=0) return 0; } return 1; } void dfs(int now, int state) { if(now==num_change) { if(check(state)) { res[num_res++] = state; used[state] = 1; } return; } dfs(now+1, change1(state)); dfs(now+1, change2(state)); dfs(now+1, change3(state)); dfs(now+1, change4(state)); } bool cmp(const int &a, const int &b) { return a < b; } int main() { fin >> num_light >> num_change; while(num_change>4) num_change -= 2; int temp; while(1) { fin >> temp; if(temp==-1) break; if(temp%6==0) temp = 6; else temp = temp%6; on[num_on++] = temp; } temp = 1; while(1) { fin >> temp; if(temp==-1) break; if(temp%6==0) temp = 6; else temp = temp%6; off[num_off++] = temp; } int now = (1<<6) - 1; dfs(0, now); //cout<<now<<endl; //cout<<max_s<<endl;// if(num_res==0) { fout<<"IMPOSSIBLE\n"; return 0; } sort(res, res+num_res, cmp); // for (int i = 0; i < num_res; ++i) // { // fout<<res[i]<<endl; // } for (int i = 0; i < num_res; ++i) { int temp = res[i]; int t = 0; for (int j = 0; ; ++j) { if(t==num_light) break; if(t%6==0) j = 0; if((temp&(1<<(5-j)))!=0) fout<<1; else fout<<0; t++; } fout<<endl; } return 0; }
相关文章推荐
- 用Javascript获取页面元素的位置
- SYN Flood攻击防范技术白皮书
- JavaScript高级程序设计之函数表达式之私有变量之静态私有变量第7.4.1讲笔记
- 高可用&负载均衡常用架构
- 互联网广告学——程序化购买
- 我的蘑菇街面经(校招内推-收到offer)
- 大话设计模式笔记 抽象工厂模式
- LeetCode——Missing Number
- 开源协议和ThinkPHP框架
- 1014. Waiting in Line (30) 模拟银行排队
- jQuery实现点击页面获得当前点击元素的id
- httpget
- CentOS 7上部署Wordpress 、Myadmin和Discuz
- REQIMPORT-购买内部应用程序(R12.2.3)
- Android重力加速度传感器数据去噪
- HDU 2133 模拟
- 关于二进制文件储存格式
- Centos 7 中修改ssh端口号的方法
- 树——Trie前缀树
- 【LeetCode解题报告】Add Digits