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

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: 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.


相关文章:
灯饰中英文术语
灯饰中英文术语_电子/电路_工程科技_专业资料。灯饰英语一、 室内灯 Residential lamp / light chandeliers pendant lamp / light half pendant lamp / light tab...
惠州-eNodeB-4月-华为LAMPSIT站点作为吸收热点话务而引入时因支持...
惠州-eNodeB-4月-华为LAMPSIT站点作为吸收热点话务而引入时因支持频段不同的RRU混用组网导致强干扰问题研究_法律资料_人文社科_专业资料。LTE ...
Lamps and lanterns
Lamps and lanterns, mutatis mutandis, the location of the installed base hole pencil good hole, hole type nylon embolism, loading embolism (such as ...
LAMP
LAMP_IT/计算机_专业资料。LAMP搭建详细过程,带备注讲解 LAMP 搭建 [root@darren ~]# rpm -qa | grephttpd\\检查系统已安装的 httpd 软件包 httpd-manual-2....
lamp
LAMP 服务器架设笔记(一) 1、LAMP 的安装 我的毕业论文是 linux 下的服务配置及数据库管理,经过一段时间搜集资料的准备工作后, 我决定选择 LAMP 配置和管理。(...
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. ...
LAMP的安装与配置
LAMP 的安装与配置(一) 1、LAMP 的安装 我的毕业论文是 linux 下的服务配置及数据库管理, 经过一段时间搜集资料的准备 工作后,我决定选择 LAMP 配置和管理。...
LAMP红联
如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 LAMP红联 L.A.M.PL.A.M.P隐藏>> LAMP 安装配置超详细讲解! szl...
百度LAMP
如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 百度LAMP 网站 安全 论文网站 安全 论文隐藏>> Linux+Apache+Mysql+Perl...
lamp
lamp_药学_医药卫生_专业资料。等温扩增实验通用型 RT-LAMP 反应液试剂盒 使用说明书 1.产品编号:LR001 产品编号: 产品编号 2.产品规格:25 次 产品规格: ...
更多相关标签: