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

The Seven Lamps of Architecture
The Seven Lamps of Architecture 《The Seven Lamps of Architecture》 阐述的建筑七大原则: “Sacrifice” 、“Truth ”、“Power ”、“Beauty ”、“Life ”...
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 ...
LED Lamps Quotation
LED Lamps Quotation_机械/仪表_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 LED Lamps Quotation_机械/仪表_工程科技_专业资料。中山市好的科技有限...

LAMP
LAMP_农林牧渔_专业资料。LAMP(环介导等温扩增)技术 (环介导等温扩增) 2011-07-28 11:46 来源:北京蓝谱 点击次数: 增 分享到: 收藏夹 腾讯微博 新浪微博 ...
LAMP
LAMP_IT/计算机_专业资料。LAMP搭建详细过程,带备注讲解 LAMP 搭建 [root@darren ~]# rpm -qa | grephttpd\\检查系统已安装的 httpd 软件包 httpd-manual-2....
Lamp的搭建以及应用
Lamp的搭建以及应用_计算机软件及应用_IT/计算机_专业资料。linux搭建服务器Lamp 的搭建以及应用环境:centos6.4-x86_64 所用软件:wordpress-3.8-zh_CN.zip php-...
lamp是什么
lamp是什么_文学_高等教育_教育专区。计算机的一种体系结构lamp 是什么 目前 lamp 的应用已经非常广泛,lamp 是基于 Linux,Apache,MySQL 和 PHP 的开放资源网络开...
Lammps_安装步骤详解
lamps 非并行安装 1 在终端输入: cd /mnt (源码包 lammps.tar.gz 放在 /mnt 下 /mnt)) (cp /home/lab/Desktop/lammps.tar.gz gunzip lamps.tar.gz ...

The first recorded use of natural gas to light street lamps it was in the town of Frederick, New York, in 1825. A.wasB.isC.it isD.were_答案解析...

dear | jewelry | lamp | lamps是什么牌子 | lammps | lamps 淘宝 | lamps软件 | lay |