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

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...
LAMP网站服务搭建
Linux 系列-Red Hat5 平台下的 LAMP 网站服务搭建(一 2010-02-25 23:45:46 标签:Linux Red Hat LAMP [推送到技术圈] Linux 系列-Red Hat5 平台下的 ...
构建LAMP网站服务平台
构建LAMP网站服务平台_IT/计算机_专业资料。构建 LAMP 网站服务平台 4.1 安装 httpd 服务 1.x: 1.0、1.1、1.2、1.3 2.x: 2.0、2.1、2.2 4.2 RPM...
灯具名称中英对照
(idal lamp 杀菌灯 gig lamps [俚]眼镜 glim lamp 暗光灯; 阴极放电管 glow-dis(harge lamp 辉光放电管 Grimm lamp 格林(放电)灯 ground lamp 接地表示灯 ...
投影机指示灯信息祥解
投影机指示灯信息祥解_信息与通信_工程科技_专业资料。自己记不清时使用。投影机指示灯信息祥解 CP型投影机为例) 一、日立公司(以日立 CP-S310W 型投影机为...
LAMP原理及调优(全)
LAMP原理及调优(全)_IT/计算机_专业资料。本文档内容 LAMP原理 apache调优 mysql调优 php调优部分: 第 1 部分 理解 LAMP 架构 http://www.ibm.com/developer...
Lamp led 基础知识介绍(好)
Lamp led 基础知识介绍(好)_自然科学_专业资料。Lamp led 基础知识介绍(好) Lamp 基础知识介绍 一.LED 的组成 一个简单的二极管(LED)一般由:芯片﹑支架﹑银胶...
lamp-yum
lamp-yum_计算机软件及应用_IT/计算机_专业资料。关闭防火墙和 SELINUX [root@localhost ~]# service iptables stop iptables: Setting chains to policy ACCEPT: ...
lamp环境搭建_自己整理完整版
lamp环境搭建_自己整理完整版_计算机软件及应用_IT/计算机_专业资料。lamp环境搭建www.lampbrother.net 一、准备工作 在 lamp 环境中搭载网站 1. 用 winsp 将...
firework lamp
烟花灯 firework lamp / light 节日灯 holiday lamp / light 圣诞灯 Christmas lamp / light 椰树灯 coconut lamp / light 卤素灯 Halide Lamps / Halogen ...
更多相关标签: