usaco2.2.4 Party Lamps

【USACO题库】2.2.4 Party Lamps派对灯 【USACO题库】2.2.4 Party Lamps派对灯 (File IO): input:lamps.in output:lamps.out 题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码。 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮。 按钮2:当按下此按钮,将改变所有奇数号的灯。 按钮3:当按下此按钮,将改变所有偶数号的灯。 按钮4:当按下此按钮,将改变所有序号是3*K+ 阅读详情

一 原题

Party Lamps
IOI 98

To brighten up the gala dinner of the IOI'98 we have a set of N (10 <= N <= 100) colored lamps numbered from 1 to N.

The lamps are connected to four buttons:

  • Button 1: When this button is pressed, all the lamps change their state: those that are ON are turned OFF and those that are OFF are turned ON.
  • Button 2: Changes the state of all the odd numbered lamps.
  • Button 3: Changes the state of all the even numbered lamps.
  • Button 4: Changes the state of the lamps whose number is of the form 3xK+1 (with K>=0), i.e., 1,4,7,...

A counter C records the total number of button presses.

When the party starts, all the lamps are ON and the counter C is set to zero.

You are given the value of counter C (0 <= C <= 10000) and the final state of some of the lamps after some operations have been executed. Write a program to determine all the possible final configurations of the N lamps that are consistent with the given information, without repetitions.

PROGRAM NAME: lamps

INPUT FORMAT

No lamp will be listed twice in the input.

Line 1:N
Line 2:Final value of C
Line 3:Some lamp numbers ON in the final configuration, separated by one space and terminated by the integer -1.
Line 4:Some lamp numbers OFF in the final configuration, separated by one space and terminated by the integer -1.

SAMPLE INPUT (file lamps.in)

10
1
-1
7 -1

In this case, there are 10 lamps and only one button has been pressed. Lamp 7 is OFF in the final configuration.

OUTPUT FORMAT

Lines with all the possible final configurations (without repetitions) of all the lamps. Each line has N characters, where the first character represents the state of lamp 1 and the last character represents the state of lamp N. A 0 (zero) stands for a lamp that is OFF, and a 1 (one) stands for a lamp that is ON. The lines must be ordered from least to largest (as binary numbers).

If there are no possible configurations, output a single line with the single word `IMPOSSIBLE'

SAMPLE OUTPUT (file lamps.out)

0000000000
0101010101
0110110110
In this case, there are three possible final configurations:
  • All lamps are OFF
  • Lamps 1, 4, 7, 10 are OFF and lamps 2, 3, 5, 6, 8, 9 are ON.
  • Lamps 1, 3, 5, 7, 9 are OFF and lamps 2, 4, 6, 8, 10 are ON.

二 分析

有n个灯,起始全是亮着的,有4种操作:1.改变所有灯状态 2. 改变奇数号灯状态 3.改变偶数号灯状态 4.改变(3k+1)号灯状态。给定目标状态中部分灯是暗还是亮。问有多少种可能的结果。
同一操作进行两次就相当于没操作。因此只需要枚举2^4=16种情况就行了。由于限制了总操作次数,有两种情况需要直接判为不可能:
1.枚举的是4种操作分别需要(n1, n2, n3, n4)次,而给定的总操作次数小于n1 + n2 + n3 + n4
2.枚举的是4种操作分别需要(n1, n2, n3, n4)次,而给定的总操作次数为n1 + n2 + n3 + n4 + 1


三 代码

运行结果:
USER: Qi Shen [maxkibb3]
TASK: lamps
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.000 secs, 4188 KB]
   Test 2: TEST OK [0.000 secs, 4188 KB]
   Test 3: TEST OK [0.000 secs, 4188 KB]
   Test 4: TEST OK [0.000 secs, 4188 KB]
   Test 5: TEST OK [0.000 secs, 4188 KB]
   Test 6: TEST OK [0.000 secs, 4188 KB]
   Test 7: TEST OK [0.000 secs, 4188 KB]
   Test 8: TEST OK [0.000 secs, 4188 KB]

All tests OK.

Your program ('lamps') produced all correct answers! This is your submission #4 for this problem. Congratulations!

AC代码:
/*
ID:maxkibb3
LANG:C++
PROG:lamps
*/

#include<cstdio>
#include<vector>
#include<cstring>
#include<set>
#include<fstream>
#include<algorithm>
using namespace std;

int n, c;
vector<int> on;
vector<int> off;
bool mark[4];
bool ori[105], fin[105];
set<string> ans;

bool ok() {
    for(int i = 0; i < on.size(); i++) {
        if(!fin[on[i]]) return false;
    }
    for(int i = 0; i < off.size(); i++) {
        if(fin[off[i]]) return false;
    }
    return true;
}

void make_ans() {
    string s = "";
    for(int i = 0; i < n; i++) {
        if(fin[i]) s += "1";
        else s += "0";
    }
    ans.insert(s);
}

void trans(int idx) {
    switch(idx) {
        case 0:
            for(int i = 0; i < n; i++) fin[i] = !fin[i];
            break;
        case 1:
            for(int i = 0; i < n; i += 2) fin[i] = !fin[i];
            break;
        case 2:
            for(int i = 1; i < n; i += 2) fin[i] = !fin[i];
            break;
        case 3:
            for(int i = 0; i < n; i += 3) fin[i] = !fin[i];
            break;
    }
}

void judge() {
    int min_c = 0;
    for(int i = 0; i < 4; i++) {
        if(mark[i]) min_c++;
    }
    if(min_c > c) return;
    if(c - min_c == 1) return;
    for(int i = 0; i < n; i++) fin[i] = ori[i];
    for(int i = 0; i < 4; i++) {
        if(mark[i]) trans(i);
    }
    if(ok()) {
        make_ans();
    }
}

void dfs(int depth) {
    if(depth == 4) {
        judge();
        return;
    }
    dfs(depth + 1);
    mark[depth] = true;
    dfs(depth + 1);
    mark[depth] = false;
}

int main() {
    freopen("lamps.in", "r", stdin);
    ofstream fout;
    fout.open("lamps.out");
    int id;
    scanf("%d%d%d", &n, &c, &id);
    while(id != -1) {
        on.push_back(id - 1);
        scanf("%d", &id);
    }
    scanf("%d", &id);
    while(id != -1) {
        off.push_back(id - 1);
        scanf("%d", &id);
    }
    for(int i = 0; i < n; i++) ori[i] = true;
    dfs(0);
    if(ans.size() == 0) fout << "IMPOSSIBLE" << endl;
    else {
        set<string>::iterator it;
        for(it = ans.begin(); it != ans.end(); it++) {
            fout << *it << endl;
        }
    }
    fout.close();
    return 0;
}


薛定谔 | 先导化合物优化与相互作用可视化 当获得针对某个靶点的先导分子后,想要在此基础上进行化学结构修饰。为了提升化学改造的成功率可以采用本教程方法进行结构虚拟改造/优化。每用薛定谔处理一个新任务,第一步必须创建新的project以方便日后管理。选项卡中修改工作路径(可以方便地找到输出文件) 阅读详情

相关推荐

Ansys Circuit新手必看:IBIS模型导入时,Pin Import和Buffer Import到底怎么选?

本文详细解析了Ansys Circuit中IBIS模型导入时Pin Import与Buffer Import的选择策略,帮助SI/PI工程师根据仿真需求做出正确决策。通过对比两种方式的特性差异和应用场景,提供实用的选择指南和性能优化建议,提升信号完整性仿真效率。

weixin_26846533的博客 260

USACO 2.2.4 派对灯 Party Lamps

题解 这题还是比较有意思的,难在理解题意。 naive的遍历所有情况 O(4^N) 是绝对不行滴。 仔细想想,按一个按键 偶数次等于不按,按奇数次相当于按一次。所以某按钮按几次可以统统转化为按了0或1次。 再想想,按的次序有没有影响。答案是没有,模拟一下可知。 那么其实,所谓的 4^N 种 变化其实 就只有 0000~1111 这 16种而已。那么我们把这16种情况全部求出再作比较即可。...

蟋蟀的博客 382

基于python获取网易云热门歌单及封面

先看一下图片背后的代码 非常好,里面歌单名字,id,以及封面图片都有了.在复制url的时候注意把/#删掉,要不然爬不了. import requests from lxml import etree url='https://music.163.com/discover/playlist' head={ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Ch

ziyuan12345678的博客 536

[USACO 2.2.4] Party Lamps

[题目描述] Party Lamps 派对灯 IOI98 在IOI98的节日宴会上,我们有N(10 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮。按钮2:当按下此按钮,将改变所有奇数号的灯。按钮3:当按下此按钮,将改变所有偶数号的灯。按钮4:当按下此按钮,将改变所有序号是3*K+1(K>=0)的灯。例如:1,4,7..

_Nirvana 889

告别RXTX:SpringBoot集成jSerialComm实现更现代的串口通信(附完整代码对比)

本文详细介绍了如何从传统的RXTX库迁移到jSerialComm,实现SpringBoot项目中更现代的串口通信。通过对比两种技术的依赖配置、API设计和跨平台支持,展示了jSerialComm在简化部署、提升性能和增强稳定性方面的优势,并提供了完整的代码示例和实战经验。

weixin_42522964的博客 285

墨水屏高效开发:架构、开源库与实战优化指南

嵌入式显示技术中,电子墨水屏以其类纸观感和超低功耗特性,在电子书阅读器、智能办公本及工业仪表等场景中占据独特地位。其工作原理基于微胶囊电泳技术,仅在画面刷新时消耗电能,静态显示时功耗近乎为零,这带来了极致的续航优势。为实现流畅的交互体验,开发者需构建分层渲染架构,通过硬件抽象层统一驱动接口,并引入帧缓冲与差异比较算法智能决策局部刷新区域,从而大幅降低刷新延迟与功耗。开源库如GxEPD2和LVGL为墨水屏适配提供了关键支持,结合波形文件管理与电源优化策略,能有效解决残影与卡顿问题。本文聚焦于eink墨水屏高效

weixin_42545636的博客 411

USACO 2.2.4 Party Lamps

Translation 在IOI98的节日宴会上,我们有N(10 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮。 按钮2:当按下此按钮,将改变所有奇数号的灯。 按钮3:当按下此按钮,将改变所有偶数号的灯。 按钮4:当按下此按钮,将改变所有序号是3*K+1(K>=0)的灯。例如:1,4,7... 一个计数器C记录按钮被按下的次数。当宴会开

Dream Catcher 451

K型热电偶负电压采集难题?3种运放电路设计方案对比(含Multisim仿真)

本文针对K型热电偶在低温测量中产生的负电压采集难题,详细对比了三种运放电路设计方案,包括双电源运放反相放大、单电源仪表放大器和差分放大电路,并结合Multisim仿真数据分析了各方案的性能差异。文章还提供了PCB布局和抗干扰设计的实战技巧,帮助工程师解决热电偶信号采集中的核心挑战。

postgres8guard的博客 1018

【USACO2.2.4】Party Lamps派对灯——杨子曰题目

【USACO2.2.4】Party Lamps派对灯——杨子曰题目 题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码。 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮。 按钮2:当按下此按钮,将改变所有奇数号的灯。 按钮3:当按下此按钮,将改变所有偶数号的灯。 按钮4:当按...

杨子曰:代码是神奇的 796

Windows Server 2012评估版过期自动关机问题:两种高效解决方案详解

本文针对Windows Server 2012评估版过期导致的自动关机问题,提供了两种高效解决方案。一是通过slmgr.vbs命令重置授权,临时延长评估期;二是使用DISM工具将评估版转换为正式版,一劳永逸。文章详细解析了两种方法的操作步骤、注意事项及适用场景,帮助用户快速恢复服务器稳定运行。

pytorchlight8的博客 1195

手把手教你学Simulink--逆变器场景:基于Simulink的单相全桥逆变器PWM控制仿真建模

本文介绍了使用Simulink和Simscape Electrical库进行单相全桥逆变器PWM控制仿真建模的详细步骤。主要内容包括:从创建Simulink项目、添加电力电子组件、构建逆变器模型,到设置参数、运行仿真和结果分析。重点讲解了逆变器核心模块的配置、PWM信号生成、负载建模等关键环节,并提供了优化改进建议。该指南适用于电力电子初学者,通过仿真可以帮助理解单相全桥逆变器的工作原理和PWM控制技术,为实际应用和算法开发提供基础平台。

MHD0815的博客 665

USACO:2.2.4 Party Lamps 派对灯

USACO:2.2.3  Party Lamps 派对灯 题目描述 ★Party Lamps 派对灯 在IOI98 的节日宴会上,我们有N(10 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮. 按钮2:当按下此按钮,将改变所有奇数号的灯. 按钮3:当按下此按钮,将改变所有偶数号的灯. 按钮4:当按下此按钮,

蓝e的专栏 2982

Airtest进阶使用篇-提高脚本稳定性+批量运行脚本

Airtest进阶篇,主要分享如何提高脚本稳定性+如何批量运行脚本生成测试报告!

程序员小杨哥的博客 2569

USACO 2.2.4 Party Lamps 题解

【算法】模拟  【难度】★★★☆☆ 关键在于题目分析。此题要求按下C次后符合要求的灯的所有情况。按题意,0<=C<=10000,如果直接枚举所有的情况并判断显然会超时。注意分析题目可知: 1、任意一个按钮按下两次相当于一次都没按。利用这一点可以解决所有C>4的情况。由于只有4个按钮,所以C>4时必然至少有一个按钮被按下两次,故所有的情况可归为以下15种:...

aigai2119的博客 175

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

USACO2.2.4 Party Lamps (lamps)

首先可以发现,灯i和灯i+6是一样的,所以对于所有的n,都可以看作是n=6的情况,输出时反复输出即可(n 一开始给出最后灯的开关情况,把编号模6存起来。如果一个位置既是开的又是关的,就可以直接输出IMPOSSIBLE。 每个灯按两次等于不按,所以其实只有按与不按两种状态,所以当c>4就可以一直-2直到c 所以每个灯按与不安一共2^4=16种情况。 用一个6位的二进制数表示灯的状态,从右向左

Shion的专栏 500

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

USACO 2.2.4 [Party Lamps] (lamps)

算法:数值,规律,模拟 别人的程序,各种看不懂…… 基本思路却是明白了,就是最多有16种变化方案:1,2,3,4,1-2,1-3,1-4,2-3,2-4,3-4,1-2-3,1-2-4,1-3-4,2-3-4,1-2-3-4,1-1-1-1(也可以是别的,总之就是不做任何操作

186

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

USACO 2.2.4 Party Lamps 解题报告

Party Lamps IOI 98 To brighten up the gala dinner of the IOI'98 we have a set of N (10 <= N <= 100) colored lamps numbered from 1 to N. The lamps are connected to four buttons: Button 1:...

weixin_30840573的博客 128

JZOJ1265.【USACO题库】2.2.4 Party Lamps派对灯

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

路人黑的纸巾 773

USACO - 2.2.4 - Party Lamps

  原创文章转载请注明出处 摘要:枚举,三星 一. 题目翻译 1. 描述: 在IOI98的节日宴会上,我们有N(10&lt;=N&lt;=100)盏彩色灯,他们分别从1到N被标上号码。 这些灯都连接到四个按钮: 一个计数器C记录按钮被按下的次数。当宴会开始,所有的灯都亮着,此时计数器C为0。 你将得到计数器C(0&lt;=C&lt;=...

12312312341234 181

Party Lamps_usaco2.2.4_暴力?

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

olahiuj的博客 619
上一篇: usaco2.1.4 Healthy Holsteins
下一篇: usaco2.3.1 Longest Prefix
max_kibble
博客等级 码龄11年 2粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值