当前位置:首页 >> 学科竞赛 >>

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 connecte

d 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. 【我的思路】 可以把这题分成两步,如果 C 是个奇数的话,就相当于每个按键都可能按一下,如果 C 是 个偶数的话,相当于任意两个不同的按钮被按了,然后就把每种情况列举一下。要注意的是 它 IMPOSSIBLE 的判断。 【code】 { ID:yxy07015 PROG:lamps LANG:PASCAL } var n,c,m,x,i:integer; shine,b:array[1..103] of integer; possible:boolean; procedure print; begin for i:=1 to n-1 do write(shine[i]); writeln(shine[n]); end; function check:boolean; begin for i:=1 to n do if b[i]<>0 then

begin if (b[i]=1) and (shine[i]=0) then exit(false); if (b[i]=-1) and (shine[i]=1) then exit(false); end; exit(true); end; procedure doit2; begin for i:=1 to n do shine[i]:=1; for i:=1 to n do shine[i]:=(shine[i]+1) mod 2; if check then begin print; possible:=true; end; for i:=1 to n do shine[i]:=1; for i:=0 to n div 3 do shine[i*3+1]:=(shine[i*3+1]+1) mod 2; for i:=1 to m do shine[i*2]:=(shine[i*2]+1) mod 2; if check then begin print; possible:=true; end; for i:=1 to n do shine[i]:=1; for i:=1 to m+1 do shine[i*2-1]:=(shine[i*2-1]+1) mod 2; if check then begin print; possible:=true; end; for i:=1 to n do shine[i]:=1; for i:=0 to n div 3 do shine[i*3+1]:=(shine[i*3+1]+1) mod 2; if check then begin print; possible:=true; end; for i:=1 to n do shine[i]:=1; for i:=1 to n do shine[i]:=(shine[i]+1) mod 2; for i:=0 to n div 3 do shine[i*3+1]:=(shine[i*3+1]+1) mod 2; if check then begin print; possible:=true; end; for i:=1 to n do shine[i]:=1; for i:=1 to m do shine[i*2]:=(shine[i*2]+1) mod 2; if check then begin print; possible:=true; end; for i:=1 to n do shine[i]:=1; for i:=1 to m+1 do shine[i*2-1]:=(shine[i*2-1]+1) mod 2; for i:=0 to n div 3 do shine[i*3+1]:=(shine[i*3+1]+1) mod 2; if check then begin print; possible:=true; end; for i:=1 to n do shine[i]:=1; if check then begin print; possible:=true; end; end; procedure doit1; begin for i:=1 to n do shine[i]:=1; for i:=1 to n do shine[i]:=(shine[i]+1) mod 2; if check then begin print; possible:=true; end; for i:=1 to n do shine[i]:=1; for i:=1 to m+1 do shine[i*2-1]:=(shine[i*2-1]+1) mod 2;

if check then begin print; possible:=true; end; for i:=1 to n do shine[i]:=1; for i:=0 to n div 3 do shine[i*3+1]:=(shine[i*3+1]+1) mod 2; if check then begin print; possible:=true; end; for i:=1 to n do shine[i]:=1; for i:=1 to m do shine[i*2]:=(shine[i*2]+1) mod 2; if check then begin print; possible:=true; end; for i:=1 to n do shine[i]:=1; if check then begin print; possible:=true; end; end; begin assign(input,'lamps.in'); reset(input); assign(output,'lamps.out'); rewrite(output); readln(n); readln(c); fillchar(b,sizeof(b),0); read(x); possible:=true; while x<>-1 do begin inc(b[x]); read(x); possible:=false; end; read(x); while x<>-1 do begin dec(b[x]); read(x); possible:=false; end; if (c=0) and possible then begin for i:=1 to n-1 do write(1); writeln(1); exit; end else if (c=0) and not possible then begin writeln('IMPOSSIBLE'); exit; end; m:=n div 2; possible:=false; if c mod 2=1 then doit1 else doit2; if not possible then writeln('IMPOSSIBLE'); close(input); close(output); end.

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


相关文章:
aLAMP搭建
aLAMP搭建_计算机软件及应用_IT/计算机_专业资料。LAMP 的搭建 1.本地 yum 的配置 #yum clean #yum list #yum install –y gcc gcc-c++ gcc-g77 #必须...
骐达11款保险丝翻译
POS LAMPS R 右前后示宽灯 10A F7:POS LAMPS L 左前后示宽灯 10A F9:A/C CLUTCH 空调离合器 10A F10:FR FOG LAMP 前雾灯 15A F11:H/LAMP HI RH ...
linux上的Apache服务和LAMP环境的配置详细步骤
LAMP 说的是 linux 操作系统作为 web 服务体系的构建平台,Apache 服务体系的构建平台, 服务器, 数据库服务器, 作为前端的 web 服务器,Mysql 作为后端的 SQL ...
Centos7 LAMP环境搭建
Centos7 LAMP环境搭建_计算机软件及应用_IT/计算机_专业资料。Centos最新系列Centos7Lamp(linux,apache,mysql,php)环境搭建教程,非常详细。...
lamp环境搭建_自己整理完整版
lamp环境搭建_自己整理完整版_计算机软件及应用_IT/计算机_专业资料。lamp环境搭建www.lampbrother.net 一、准备工作 在 lamp 环境中搭载网站 1. 用 winsp 将...
Lamp led 基础知识介绍(好)
Lamp led 基础知识介绍(好)_自然科学_专业资料。Lamp led 基础知识介绍(好) Lamp 基础知识介绍 一.LED 的组成 一个简单的二极管(LED)一般由:芯片﹑支架﹑银胶...
灯具名称中英对照
(idal lamp 杀菌灯 gig lamps [俚]眼镜 glim lamp 暗光灯; 阴极放电管 glow-dis(harge lamp 辉光放电管 Grimm lamp 格林(放电)灯 ground lamp 接地表示灯 ...
linux下构建LAMP架构详细过程
linux下构建LAMP架构详细过程_IT/计算机_专业资料。linux下构建LAMP架构详细过程linux 下构建 LAMP 架构详细过程 LAMP 网页应用架构想必大家都知道了 Linux 操作系统...
LAMP原理及调优(全)
LAMP原理及调优(全)_IT/计算机_专业资料。本文档内容 LAMP原理 apache调优 mysql调优 php调优部分: 第 1 部分 理解 LAMP 架构 http://www.ibm.com/developer...
LAMP一键安装
LAMP一键安装_计算机软件及应用_IT/计算机_专业资料。lanmp/lamp/lnmp/lnamp 一键安装包,快速安装包,linux 服务器 WEB 环境一键安装包 lanmp/lamp/lnmp/lnamp 一键...
更多相关标签: