2.2.4 PARTY LAMPS 派对灯

http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=2328

题目大意:(如题)

输入输出:(如题)

解题思路:

1.因为每个按钮按2次和没按效果是一样的。所以每个按钮或者按或者不按,一共有2^4=16中状态。

2.然后因为这个电灯系统有个性质,每6个一循环,所以把这4个按钮的16种状态对应的前6个灯的状态枚举出来。然后分析,发现一下规律:

-按1和按2相当于按3;

-按2和按3相当于按1;

-按1和按3相当于按2;

-按1按2和按3相当于不按;

-相差3的倍数也可以相互转换;

消重之后得到8种按法:不按,按1,按2,按3,按4,按1按4,按2按4,按3按4。

相对应的最少按的次数为:0,1,1,1,1,2,2,2。

3.参照了NOCOW-USACO上的一个比较邪恶的方法-常量表法,把前6个灯的状态保存在light数组里面,然后用一个minnum数组存储相应状态的按的次数。如下:

int light[9][7]={
    0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,//按1
    0,0,0,1,1,1,0,//按1按4
    0,0,1,0,1,0,1,//按3
    0,0,1,1,0,1,1,//按1按4
    0,1,0,0,1,0,0,//按4
    0,1,0,1,0,1,0,//按2
    0,1,1,0,0,0,1,//按2按4
    0,1,1,1,1,1,1,//不按
};//常量表

int minnum[9]={0,1,2,1,1,2,1,2,0};//对应常量表8个状态最少摁的次数

4.然后就可以开始写代码了,嘿嘿

核心代码:

flag1=false;
    for(i=1;i<9;i++)
    {
        flag2=true;
        for(j=1;j<=n;j++)
        {
            if(dat[j]==-1)//如果没有确定是亮或灭
                continue;
            tmp=j%6;//六位循环
            if(tmp==0)//如果是6的倍数
                tmp=6;
            if(dat[j]!=light[i][tmp])//有个灯不同说明不是这个状态,结束判断
            {
                flag2=false;
                break;
            }
        }
        if(flag2==true&&c>=minnum[i])
        {
            flag1=true;//有一个满足条件就标记
            for(j=1;j<=n;j++)
            {
                tmp=j%6;
                if(tmp==0)
                    tmp=6;
                cout<<light[i][tmp];
            }
            cout<<endl;
        }
    }
    if(flag1==false)
        cout<<"IMPOSSIBLE"<<endl;

时间: 2024-08-28 02:33:23

2.2.4 PARTY LAMPS 派对灯的相关文章

USACO 2.2 Party Lamps 派对灯 (lamps)

题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码.这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮. 按钮2:当按下此按钮,将改变所有奇数号的灯. 按钮3:当按下此按钮,将改变所有偶数号的灯. 按钮4:当按下此按钮,将改变所有序号是3*K+1(K>=0)的灯.例如:1,4,7... 一个计数器C记录按钮被按下的次数.当宴会开始,所有的灯都亮着,此时计数器C为0.你将得到计数器C

【USACO 2.2.4】派对灯

[描述] 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮. 按钮2:当按下此按钮,将改变所有奇数号的灯. 按钮3:当按下此按钮,将改变所有偶数号的灯. 按钮4:当按下此按钮,将改变所有序号是3*K+1(K>=0)的灯.例如:1,4,7... 一个计数器C记录按钮被按下的次数.当宴会开始,所有的灯都亮着,此时计数器C为0. 你将得到计数

洛谷 P1468 [USACO2.2]派对灯 Party Lamps

题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮. 按钮2:当按下此按钮,将改变所有奇数号的灯. 按钮3:当按下此按钮,将改变所有偶数号的灯. 按钮4:当按下此按钮,将改变所有序号是3*K+1(K>=0)的灯.例如:1,4,7... 一个计数器C记录按钮被按下的次数.当宴会开始,所有的灯都亮着,此时计数器C为0. 你将得到计数

luogu P1468 派对灯 Party Lamps

题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮. 按钮2:当按下此按钮,将改变所有奇数号的灯. 按钮3:当按下此按钮,将改变所有偶数号的灯. 按钮4:当按下此按钮,将改变所有序号是3*K+1(K>=0)的灯.例如:1,4,7... 一个计数器C记录按钮被按下的次数.当宴会开始,所有的灯都亮着,此时计数器C为0. 你将得到计数

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

经过分析,他看似很多的开灯的方法其实合并起来就只有八个. 首先,一个开关在执行的时候只能按一次(因为你就算按了两次就相当于一次也没有按). 当一个都不按的时候  当然就只有一种:不按. 当按一下的时候:很明显(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,

8.20~8.25刷散题记录 By cellur925

记录一些散题 / 价值不大但还是想记下来的题目 / 没正八经写博客的题目 8.24 Luogu P1508 沙雕题数字三角形的二维升级版,但是注意阅读理解,李大水牛从桌子最后一行下侧开始吃,而本题是自下而上,其实按自上而下做也行,只不过最后的答案变成了三者取一最值.(面前.左上.右上)其他与数字三角形无异. 1 #include<cstdio> 2 #include<algorithm> 3 4 using namespace std; 5 6 int n,m; 7 int f[4

【USACO 2.2】Party Lamps

四种开关,n盏灯,1:改变所有灯状态,2:改变奇数灯状态,3:改变偶数灯状态,4:改变3k+1灯状态 给你按开关的总次数c和部分灯限制条件(开或关),一开始都是开着的.($c \leq 10000,n \leq 100$) 我直接考虑每个开关按了奇数次或偶数次,因为顺序和总次数不影响结果,重要的是每种开关按的次数是奇数还是偶数次. 题解里有个flip[i]= (1<<6-1)&0x55 和与上0xAA,分别代表2.3开关,因为0x55就是01010101,0xAA就是10101010,

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

lamps解题报告------------------------------------------------------------------------------------------------------------------------------------------------[题目] N个灯,编号1~N.有4个开关,和C次改变某个开关状态的机会,试问最终所有灯的亮灭情况可能有哪些? 一号开关:改变所有灯的状态. 二号开关:改变所有奇数号灯的状态. 三号开关:改变所有

HDU 2053 Switch Game(开灯问题,唯一分解定理)

Switch Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15011    Accepted Submission(s): 9160 Problem Description There are many lamps in a line. All of them are off at first. A series of o