USACO Party Lamps
题目大意:一排灯有n个,有4种开关,每种开关能改变一些灯现在的状态(亮的变暗,暗的变亮)现在已知一些灯的亮暗情况,问所以可能的情况是哪些
思路:同一种开关开两次显然是没效果的,那么枚举每个开关是否开就好了,还是暴力大法好
/*{
ID:a4298442
PROB:lamps
LANG:C++
}
*/
#include<iostream>
#include<fstream>
#include<cstring>
#include<algorithm>
#define maxn 109
using namespace std;
ifstream fin("lamps.in");
ofstream fout("lamps.out");
//#define fin cin
//#define fout cout
int lamp[maxn],temp[maxn],n1,n2,a[maxn],b[maxn];
struct T
{
char ch[maxn];
}ans[maxn];
void but1(int n)
{
for(int i=;i<=n;i++)lamp[i]^=;
}
void but2(int n)
{
for(int i=;i<=n;i+=)lamp[i]^=;
}
void but3(int n)
{
for(int i=;i<=n;i+=)lamp[i]^=;
}
void but4(int n)
{
for(int i=;i*+<=n;i++)lamp[i*+]^=;
}
int check(int n,int c,int count_now)
{
for(int i=;i<n1;i++)if(lamp[a[i]]==)return ;
for(int i=;i<n2;i++)if(lamp[b[i]]==)return ;
if(count_now>c)return ;
int u=c-count_now;
if(u&)return ;
return ;
}
int cmp(T x, T y)
{
return strcmp(x.ch+,y.ch+)>=?false:true;
}
int main()
{
int n,c;
fin>>n>>c;
while(fin>>a[++n1]&&a[n1]!=-);
while(fin>>b[++n2]&&b[n2]!=-);
for(int i=;i<=n;i++)temp[i]=;
int h=;
for(int i=;i<=(1LL<<)-;i++)
{
int count_now=;
memcpy(lamp,temp,sizeof(lamp));
for(int j=,idx=;j<=i;j<<=,idx++)if((i&j)!= )
{
count_now++;
if(idx==)but1(n);
if(idx==)but2(n);
if(idx==)but3(n);
if(idx==)but4(n);
}
if(check(n,c,count_now))
{
h++;
for(int i=;i<=n;i++)
{
ans[h].ch[i]=lamp[i]+'';
}
}
}
if(h==)fout<<"IMPOSSIBLE"<<endl;else
{
sort(ans+,ans++h,cmp);
for(int i=;i<=h;i++)fout<<ans[i].ch+<<endl;
}
return ;
}
USACO Party Lamps的更多相关文章
- USACO Party Lamps 【Binary code solvution】【规律】
写这道题目的时候遇到了一个令人诧异的问题,就是平台上跑来的结果和我本机跑起来的结果不一样. 后来Debug了之后才发现是我数组开小了,只开到100 的数组竟然都去访问他170位的地址肯定要跪成翔啊.. ...
- 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 lamps
IOI 98称号.然后,它似乎没有很困难.即使我能做到这一点微弱的残留物.所有的button按两次不按,高达因此实际上总的等效按4二级,首先C往下<=4,则搜索将能直接照射,总共只有16状态(事 ...
- USACO Section2.2 Party Lamps 解题报告 【icedream61】
lamps解题报告------------------------------------------------------------------------------------------- ...
- 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:当 ...
随机推荐
- sqlite的应用
对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取.下面就向大家介绍一下SQLite常用的操作方法.本篇文章主要用到SQLiteDataba ...
- make与makefile的几个例子和(自己写一下,汗!忘记了!)总结
共用的几个源代码文件: main.c 2.c 3.c 代码依次为: #include<stdlib.h> #include "a.h" extern void func ...
- idea报错:The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configu
java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more tha ...
- Prim算法解决最小生成树
一.最小生成树问题 什么是最小生成树问题?给你一个带权连通图,需要你删去一些边,使它成为一颗权值最小的树. 二.Prim算法 1)输入:输入一个带权连通图,顶点集合V,边集合E 2)初始化:Vnew= ...
- 想转行做web前端工程师,必学这5大技能!知道是那些吗?
web前端工程师是近几年才发展出来的新兴职业,也是目前火爆且高薪的职业. 大需求的市场环境下,出现了越来越多的人群转行做web前端工程师,如设计师.后台程序员.网虫.大学其他专业.策划.编辑等等. 要 ...
- Navicat 复制多条数据
- java后台验证码的生成
前台代码: <tr> <td>验证码</td> <td><input name="checkCode" type=" ...
- Clover KextsToPatch 使用方法 2015.10.21
Clover KextsToPatch 使用方法 2015.10.21 前些天,因为 Thinkpad X230 BIOS 白名单限制,给她换了一块 ar9285 无线网卡,只是因为这块网卡正好可 ...
- Codeforces Round #510 #B
http://codeforces.com/contest/1042/problem/B 题意: 给出n种饮料,每种饮料还有一种或多种维生素(A或B或C),某人想集齐三种维生素,问最少需要花费多少? ...
- windows python MySQLdb 安装配置
一.环境 系统:windows10/7/8 软件: 1.python2.7.XX(https://www.python.org/downloads/或者https://www.python.org/f ...