经过分析,他看似很多的开灯的方法其实合并起来就只有八个。

首先,一个开关在执行的时候只能按一次(因为你就算按了两次就相当于一次也没有按)。

当一个都不按的时候  当然就只有一种:不按。

当按一下的时候:很明显(1)(2)(3)(4)四种。

当按两下的时候:(1,2)(1,3)(1,4)(2,3)(2,4)(3,4)。 然而(1,2)就相当于是3;(1,3)=2;(2,3)=1;所以按两下的就只有(1,4)(2,4)(3,4)。

当按三下的时候:(1,2,3)(1,2,4)(1,3,4)(2,3,4)....。然而都可以相当于 空(3,4)(2,4)(1,4)也就是什么都没有了 QWQ;

按四下:应该就可以发现其实也是能和前面的合并;

所以所有的策略中就只有8中了:空 (1)(2)(3)(4)(1,4)(2,4)(3,4)。

这就已经把按灯的套路合并完了。

-----------------------------接下来是计数器c的情况的分析----------------------------------------------------

当c==0的时候,很明显:不按。

当c==1的时候,也很明显:(1)(2)(3)(4) 四种。

当c==2的时候,就有七种情况了:(1)[按2和3合并为1((2)(3)的情况一样)](2)(3)(1,4)(2,4)(3,4)不按(这里没有(4),因为无论如何按两下都不可能把(4)给按出来)。

当c==3的时候,所有情况都可以了(你问我为什么??像第二步一样了)。

所以这道题很容易的就搞定了。

#include<iostream>
#include<cstdio>
#include<ctime>
#include<algorithm>
using namespace std;
int n,c,x;
int a[150],b[150],d[150];
long long q[150];
int t=0;
void init()
{
cin>>n>>c;
while((cin>>x)&&(x!=-1))
a[x]=1;
while((cin>>x)&&(x!=-1))
b[x]=1;
}
void haha()
{
for(int i=1;i<=n;i++)
d[i]=1;
}
bool check()
{
for(int i=1;i<=n;i++)
{
if((a[i])&&(!d[i])) return 0;
if((b[i])&&(d[i])) return 0;
}
return 1;
}
void print()
{
for(int i=1;i<=n;i++)
cout<<d[i];
cout<<endl; t++;
}
void doit1()
{
for(int i=1;i<=n;i++)
d[i]=(d[i])?0:1;
}
void doit2()
{
for(int i=1;i<=n;i+=2)
d[i]=(d[i])?0:1;
}
void doit3()
{
for(int i=2;i<=n;i+=2)
d[i]=(d[i])?0:1;
}
void doit4()
{
for(int i=1;i<=n;i+=3)
d[i]=(d[i])?0:1;
}
int main()
{
freopen("add.in","r",stdin);
freopen("add.out","w",stdout);
init();
haha();
switch(c)
{
case 0:
if(check()) print();
break;
case 1:
haha(); doit1();
if(check()) print();
haha(); doit2();
if(check()) print();
haha(); doit3();
if(check()) print();
haha(); doit4();
if(check()) print();
break;
case 2:
haha(); doit1();
if(check()) print();
haha(); doit3(); doit4();
if(check()) print();
haha(); doit2();
if(check()) print();
haha(); doit1(); doit4();
if(check()) print();
haha(); doit3();
if(check()) print();
haha(); doit2(); doit4();
if(check()) print();
haha();
if(check()) print();
break;
default:
haha(); doit1();
if(check()) print();
haha(); doit3(); doit4();
if(check()) print();
haha(); doit2();
if(check()) print();
haha();doit4();
if(check()) print();
haha(); doit1(); doit4();
if(check()) print();
haha(); doit3();
if(check()) print();
haha(); doit2(); doit4();
if(check()) print();
haha();
if(check()) print();
break;
}
if(t==0){
cout<<"IMPOSSIBLE"<<endl;
}
return 0;
}

usaco 2.2.4 生日派对灯(最近写题碰到的,虽然知道现在写这个有点晚了)的更多相关文章

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

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

  2. 【USACO 2.2.4】派对灯

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

  3. jzoj P1163 生日派对灯

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

  4. 【BFS/DFS/YY】派对灯

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

  5. luoguP1468 派对灯 Party Lamps x

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

  6. 【搜索】P1468 派对灯 Party Lamps

    P1468 派对灯 Party Lamps 我们来分析一下对灯的操作 1.对所有灯的,这时吧所有灯看成一个整体 2.奇偶数的操作,这时可以把每两个数看成一个循环节 3.对3X+ 1的操作,这时可以把每 ...

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

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

  8. luogu P1468 派对灯 Party Lamps

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

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

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

随机推荐

  1. oracle导入数据

    oracle导入数据时候注意点: 1.imp system/admin@oracle9i file=E:\shujukuwenjian\2014-04-01.dmp fromuser=ptb_supe ...

  2. Hadoop作业提交之TaskTracker获取Task

    [Hadoop代码笔记]Hadoop作业提交之TaskTracker获取Task 一.概要描述 在上上一篇博文和上一篇博文中分别描述了jobTracker和其服务(功能)模块初始化完成后,接收JobC ...

  3. Class Model of Quick Time Plugin

    Quick Time Plugin 的类图. pdf version: http://pan.baidu.com/s/1o6oFV8Q

  4. c语言,string库函数itoa实现:将int转换为char*

    原型:char  *itoa(int   value,char   *string)        功能:将整数value转换成字符串存入string,默认为十进制;      说明:返回指向转换后的 ...

  5. C#:iterator 迭代器/partial class 分布类/泛型

    C#:iterator 迭代器/partial class 分布类/泛型 iterator 迭代器 写个最简单的迭代,(迭代一个字符串数组): 1.实现接口中的方法: 1 using System; ...

  6. ubunt 命令行下链接VPN

    Ubuntu命令行下VPN连接与使用 route add default dev ppp0 route add -net 192.168.2.0 netmask 255.255.255.0 ppp0 ...

  7. 构建一个真实的应用电子商务SportsStore9

    使用MVC4,Ninject,EF,Moq,构建一个真实的应用电子商务SportsStore(九) 实在不好意思,好久没有更新了,我不想找些客观原因来解释,只想请大家见谅!现在我们继续我们的项目,客户 ...

  8. MSSQL 清空日志 删除日志文件

    MSSQL 清空日志 删除日志文件 最近的项目主要做数据的归档,把数据从一个数据库拉到另一个数据库,照成新数据库的日志文件非常大:于是想把日志文件删除.最简单就是先分离数据库->删除日志文件-& ...

  9. TOGAF架构内容框架之内容元模型(下)

    TOGAF架构内容框架之内容元模型(下) 2.2 治理扩展(Governance Extensions) 治理扩展元模型内容 治理扩展部分的意图在于引入额外的,并且与支持运营治理的目标和业务服务相关的 ...

  10. 设计模式之 - 工厂方法模式 (Factory Method design pattern)

    1. 模式意图:  定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 2. 别名(Virtual Constructor) 3. 结构 4. 工厂方法模式C ...