USACO lamps
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的更多相关文章
- USACO 2.2 Party Lamps 派对灯 (lamps)
题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码.这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭 ...
- 【USACO 2.2】Party Lamps
四种开关,n盏灯,1:改变所有灯状态,2:改变奇数灯状态,3:改变偶数灯状态,4:改变3k+1灯状态 给你按开关的总次数c和部分灯限制条件(开或关),一开始都是开着的.($c \leq 10000,n ...
- USACO Section 2.2: Party Lamps
这题有个小技巧, 按一个键两次等于没按,所以如果depsum > 16的话其实不用做深搜到depsum次,而只要16次就可以了. /* ID: yingzho1 LANG: C++ TASK: ...
- USACO Party Lamps 【Binary code solvution】【规律】
写这道题目的时候遇到了一个令人诧异的问题,就是平台上跑来的结果和我本机跑起来的结果不一样. 后来Debug了之后才发现是我数组开小了,只开到100 的数组竟然都去访问他170位的地址肯定要跪成翔啊.. ...
- USACO Section2.2 Party Lamps 解题报告 【icedream61】
lamps解题报告------------------------------------------------------------------------------------------- ...
- USACO Party Lamps
题目大意:一排灯有n个,有4种开关,每种开关能改变一些灯现在的状态(亮的变暗,暗的变亮)现在已知一些灯的亮暗情况,问所以可能的情况是哪些 思路:同一种开关开两次显然是没效果的,那么枚举每个开关是否开就 ...
- POJ 1176 Party Lamps&& USACO 2.2 派对灯(搜索)
题目地址 http://poj.org/problem?id=1176 题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都 ...
- Luogu USACO Training 刷水记录
开个坑记录一下刷USACO的Training的记录 可能会随时弃坑 只有代码和做法简述 可能没有做法简述 [USACO1.1]你的飞碟在这儿Your Ride Is He… 模拟,细节已忘 #incl ...
- luoguP1468 派对灯 Party Lamps x
P1468 派对灯 Party Lamps 题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都连接到四个按钮: 按钮1:当 ...
随机推荐
- windows 8.1 administrator相关设置
一.windows 8.1 开启administrator用户 windows8.1中文版,由于默认不开启administrator用户,所以需要自己手动开启 启用administrator:在cmd ...
- plsql 把数据导出成为 .sql文件,记住了
今天上午,同事 提醒我.可以直接把数据导出成 .sql 文件,类似于 反编译.见下图
- 五、C# 类
面向对象编程 类是面向对象编程的3个主要特征---封装.继承和多态性---的基础. 封装允许隐藏细节. 继承 继承关系至少涉及两个类,其中一个类(基类)是另一个类的更泛化的版本. 为了从一 ...
- hibernate_validator_06
认证组(校验组) 校验组能够让你在验证的时候选择应用哪些约束条件. 这样在某些情况下( 例如向导 ) 就可以对每一步进行校验的时候, 选取对应这步的那些约束条件进行验证了. 校验组是通过可变参数传递给 ...
- SSM框架入门和搭建 十部曲
又快到毕业设计的时候了,有的学弟说想用ssm做毕业设计,在网上找到资料看不懂,基础差.我就帮他写了一个demo,顺便也整理一下. SSM框架,顾名思义,就是Spring+SpringMVC+mybat ...
- TalkingDataGame SDK在android Lua上的使用
千呼万唤使出来...终于开始更新lua版本的内容了,之前一直有这方面的计划,由于公司业务比较多,一直比较忙-见谅.. 费话不多说,直接上内容.. 整体来讲,先是先建议看一下之前关于cocos2dx上的 ...
- EF学习系列
http://www.cnblogs.com/Wayou/archive/2012/09/20/EF_CodeFirst.html http://kb.cnblogs.com/zt/ef/#
- table-css
- eclipse中如何导入jar包
如图,首先右键点击项目,选择最下面的properties, 然后进去之后点击java build path,右边会出来4个选项卡,选择libraries, 这时候最右边会有多个选项,第一个add ja ...
- javascript Array类型 方法大全
1,创建数组 //第一种是使用Array构造函数 var colors = new Array(); var colors = new Array(20); //创建length为20的数组 var ...