IOI 98称号。然后,它似乎没有很困难。即使我能做到这一点微弱的残留物。所有的button按两次不按,高达因此实际上总的等效按4二级,首先C往下<=4,则搜索将能直接照射,总共只有16状态(事实上,没有),需要注意的是重判和订购,我们会处理的话非常快的二进制。= =不幸的是,我不会,转字符串。假设数据大点直接就挂了= =

/*
ID:kevin_s1
PROG:lamps
LANG:C++
*/ #include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <cstdlib>
#include <list>
#include <cmath>
#include <bitset>
#include <strstream> using namespace std; //gobal variable====
int N;
int C;
int state[101];
int on, off;
int ons[101], offs[101];
int _count;
vector<long long> hash;
vector<string> result;
//================== //function==========
void print(){
for(int i = 1; i <= N; i++){
cout<<state[i];
}
cout<<endl;
} void init(){
for(int i = 1; i <= N; i++)
state[i] = 1;
} bool check(){
for(int i = 0; i < on; i++){
if(state[ons[i]] != 1){
return false;
}
}
for(int i = 0; i < off; i++){
if(state[offs[i]] != 0){
return false;
}
}
return true;
} void change(int i){
if(state[i] == 0)
state[i] = 1;
else if(state[i] == 1)
state[i] = 0;
} void Button1(){
for(int i = 1; i <= N; i++){
change(i);
}
} void Button2(){
for(int i = 1; i <= N; i+=2){
change(i);
}
} void Button3(){
for(int i = 2; i <= N; i+=2){
change(i);
}
} void Button4(){
for(int i = 0; (3*i + 1) <= N; i++){
int k = 3 * i + 1;
change(k);
}
} void Button(int i){
if(i == 1)
Button1();
if(i == 2)
Button2();
if(i == 3)
Button3();
if(i == 4)
Button4();
} void DFS(int i){
if(i > C)
return;
if(check()){
long long sum = 0;
for(int i = 1; i <= N; i++){
sum = sum * 10;
sum = sum + state[i];
}
vector<long long>::iterator iter = find(hash.begin(), hash.end(), sum);
if(iter == hash.end()){
_count++;
hash.push_back(sum);
string str;
for(int i = 1; i <= N; i++){
char ch = state[i] + 48;
str = str + ch;
}
result.push_back(str);
}
}
for(int j = 1; j <= 4; j++){
Button(j);
DFS(i + 1);
Button(j);
}
return;
} //================== int main(){
freopen("lamps.in","r",stdin);
freopen("lamps.out","w",stdout);
cin>>N;
cin>>C;
on = 0, off = 0;
_count = 0;
int _on, _off;
while(cin>>_on && _on != -1){
ons[on++] = _on;
}
while(cin>>_off && _off != -1){
offs[off++] = _off;
}
init();
while(C > 4){
C = C - 2;
}
DFS(0);
sort(result.begin(), result.end(), less<string>());
vector<string>::iterator iter = result.begin();
for(;iter != result.end(); iter++){
cout<<*iter<<endl;
}
if(_count == 0){
cout<<"IMPOSSIBLE"<<endl;
}
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

USACO lamps的更多相关文章

  1. USACO 2.2 Party Lamps 派对灯 (lamps)

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

  2. 【USACO 2.2】Party Lamps

    四种开关,n盏灯,1:改变所有灯状态,2:改变奇数灯状态,3:改变偶数灯状态,4:改变3k+1灯状态 给你按开关的总次数c和部分灯限制条件(开或关),一开始都是开着的.($c \leq 10000,n ...

  3. USACO Section 2.2: Party Lamps

    这题有个小技巧, 按一个键两次等于没按,所以如果depsum > 16的话其实不用做深搜到depsum次,而只要16次就可以了. /* ID: yingzho1 LANG: C++ TASK: ...

  4. USACO Party Lamps 【Binary code solvution】【规律】

    写这道题目的时候遇到了一个令人诧异的问题,就是平台上跑来的结果和我本机跑起来的结果不一样. 后来Debug了之后才发现是我数组开小了,只开到100 的数组竟然都去访问他170位的地址肯定要跪成翔啊.. ...

  5. USACO Section2.2 Party Lamps 解题报告 【icedream61】

    lamps解题报告------------------------------------------------------------------------------------------- ...

  6. USACO Party Lamps

    题目大意:一排灯有n个,有4种开关,每种开关能改变一些灯现在的状态(亮的变暗,暗的变亮)现在已知一些灯的亮暗情况,问所以可能的情况是哪些 思路:同一种开关开两次显然是没效果的,那么枚举每个开关是否开就 ...

  7. POJ 1176 Party Lamps&& USACO 2.2 派对灯(搜索)

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

  8. Luogu USACO Training 刷水记录

    开个坑记录一下刷USACO的Training的记录 可能会随时弃坑 只有代码和做法简述 可能没有做法简述 [USACO1.1]你的飞碟在这儿Your Ride Is He… 模拟,细节已忘 #incl ...

  9. luoguP1468 派对灯 Party Lamps x

    P1468 派对灯 Party Lamps 题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都连接到四个按钮: 按钮1:当 ...

随机推荐

  1. Linux 网络配置(固定IP)

    通常linux作为服务器系统时,是不推荐安装图形界面的,因此我们需要掌握非图形界面下如何配置网络,主要两种方式,如下: 一.使用SETUP工具(redhat系列才可以,推荐此修改方式) 1.在命令行直 ...

  2. Directory类

    string[] pathes = Directory.GetDirectories(@"G:\ReawFiles");//获得所有的文件夹 string[] pathes = D ...

  3. iOS开发常用的第三方框架

    1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...

  4. spring web flow 2.0入门(转)

    Spring Web Flow 2.0 入门 一.Spring Web Flow 入门demo(一)简单页面跳转 附源码(转) 二.Spring Web Flow 入门demo(二)与业务结合 附源码 ...

  5. jdom学习:读取xml文件

    用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类.Element类等的方法读取所需的内容.IB ...

  6. spring mvc 自定义Handlermapping

    上次大概写了个可以解决velocity 多视图的东西. 但是实际运用过程中又到处找了些资料看了下.这里 小计下: DispatcherServlet解析过程: ..1..HandlerMapping. ...

  7. sock_ntop等函数

    inet_ntop的一个基本问题是:它要求调用者传递一个指向某个二进制地址的指针, 而该地址通常包含在一个套接字地址结构中,这就要求调用者必须知道这个结构的格式和地址簇, 为了使用这个函数,我们必须为 ...

  8. 添加、设置tabBarItem属性

    //tabbarItem正常状态的属性 NSMutableDictionary *nor = [NSMutableDictionary dictionary]; nor[NSForegroundCol ...

  9. 朗科U903 低级格式化后,量产错误:read onlypage (控制器芯片群联2251-03)的解决方案

    1. 下载群联量产工作 MPALL v3.63.0D for Netac 2. 在Setting页面,选择如下(红色矩形选中): 3. 然后执行量产,量产完成后,重新插拔就能看到U盘.

  10. 转:Asp JSONP 实践

    我用asp做服务端客户端 客户端页面首先在body 中放置一个div: <div id="res"></div> 将远程调用的数据写入该div中 <s ...