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

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

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

当按一下的时候:很明显(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. iOS基础 - Quartz 2D绘图的基本步骤

    一.使用Quartz 2D绘图的基本步骤 1) 获取上下文context(绘制图形的地方) 2) 设置路径(路径是用来描述形状的) 3)  将路径添加到上下文 4)  设置上下文属性(设置颜色,线宽, ...

  2. HTML初学者的三十条最佳

    颜海镜 专注web前端,分享html,css,javascript等相关知识…… 给HTML初学者的三十条最佳实践 Nettuts +运营最困难的方面是为很多技能水平不同的用户提供服务.如果我们发布太 ...

  3. WCF 自承载

    WCF 自承载 提供源码 一.WCF 简单介绍 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,是一套通讯接口.现在比较流行的S ...

  4. IT团队管理

    如果在IT项目实施中选出最难解决的几个问题,那么管理问题一定名列前茅.在管理问题中,团队管理又是其中的难点.一个项目管理的 好坏,很大程度就体现在团队的建设和管理上.团队管理涉及到管理学.心理学和哲学 ...

  5. AMQP(Advanced Message Queuing Protocol)

    一套确定的消息交换功能,也就是“高级消息交换协议模型”.AMQP模型包括一套用于路由和存储消息的功能模块,以及一套在这些模块之间交换消息的规则. 一个网络线级协议(数据传输格式),客户端应用可以通过这 ...

  6. Paint与Canvas的简单用法

    参考:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=278237 自定义View 重写onDraw方法 package com. ...

  7. [每日一题] OCP1z0-047 :2013-07-29 视图――别名

    本题的考点是如何创建视图,对于视图的详细知识点,可以参考我的博客: http://blog.csdn.net/guoyjoe/article/details/8614677 好,接下来我们来做测试,先 ...

  8. js调用父框架函数

    if (window.parent && window.parent.frames["frame_main"]) { alert(window.parent.fra ...

  9. xhEditor实现插入代码功能

    如果大家经常使用CSDN或者其他技术博客,都会有插入程序代码或脚本功能 开源中国 CSDN 这里介绍xhEditor实现插入代码功能,对xhEditor进行插件扩展 一.首先定义插件样式 <st ...

  10. Python基础-输入输出(IO)

    Python基础-输入输出(IO) 程序会有输入和输出,输入可以从标准输入或是从一个文件读入数据,程序的输出可以以一种友好可读的方式(human-readable)打印出来,或是写进一个文件,而标准输 ...