2.2.4 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.
-
{ ID: makeeca1 PROG: lamps LANG: PASCAL } program lamps; const ds:array[1..8]of byte=(0,56,21,45,18,42,7,63);//²Ù×÷Êý dc:array[1..8]of byte=(1,2,1,1,2,1,2,0); //ËùÐè°ŽŒüÊý var s1,s2,n,c,i,j:longint; flag:boolean; procedure get(var x:longint); var t:longint; begin read(t); while t<>-1 do begin x:=x or (1<< (t mod 6));//ÌíŒÓ׎̬ read(t); end; end; begin assign(input,'lamps.in');reset(input); assign(output,'lamps.out');rewrite(output); readln(n);readln(c);get(s1);get(s2);flag:=true; if (s1 and s2=0 )then for i:=1 to 8 do if (dc[i]<=c)and(ds[i] or s1=ds[i]){ds[]°üº¬s1}and(ds[i]and s2=0){ds[]²»°üº¬s2}then begin for j:=1 to n do write((ds[i]>> (j mod 6)) and 1);//žô6λѻ· writeln; flag:=false; end; if flag then writeln('IMPOSSIBLE'); close(input);close(output); end.