USACO chapter 2 section 2 Party Lamps

5300 ワード

USACO chapter 2 section 2 Party Lamps
USER: tian tianbing [tbbd4261]
TASK: lamps
LANG: C++
Compiling...
Compile: OK
Executing...
Test 1: TEST OK [0.011 secs, 3020 KB]
Test 2: TEST OK [0.000 secs, 3020 KB]
Test 3: TEST OK [0.000 secs, 3020 KB]
Test 4: TEST OK [0.011 secs, 3020 KB]
Test 5: TEST OK [0.000 secs, 3020 KB]
Test 6: TEST OK [0.000 secs, 3020 KB]
Test 7: TEST OK [0.011 secs, 3020 KB]
Test 8: TEST OK [0.011 secs, 3020 KB]
All tests OK.

Your program ('lamps') produced all correct answers! This is your submission #4 for this problem. Congratulations!


Here are the test data inputs:
------- test 1 -------
10
0
-1
-1
------- test 2 -------
10
0
-1
1 -1
------- test 3 -------
20
3
-1
1 3 5 -1
------- test 4 -------
50
100
1 -1
-1
------- test 5 -------
75
250
-1
-1
------- test 6 -------
100
8394
1 7 13 19 25 31 37 43 49 55 -1
64 -1
------- test 7 -------
100
2000
31 86 23 -1
42 -1
------- test 8 -------
100
8950
-1
-1
Keep up the good work!
Thanks for your submission!注意条件:if(c>=(i 1+i 2+i 3+i 4)&&(c-(i 1+i 2+i 3+i 4))%2==0)......
/*
ID:tbbd4261PROG:lampsLANG:C++
*/
#include
<
fstream
>
#include
<
iostream
>
#include
<
string
>
#include
<
algorithm
>
#include
<
vector
>
using
 
namespace
 std;ifstream fin(
"
lamps.in
"
);ofstream fout(
"
lamps.out
"
);
int
 n,c,t;
bool
 f[
101
];
bool
 g[
101
];
int
 last[
101
];
bool
 judge(){     
for
(
int
 i
=
1
; i
<=
n; i
++
)             
if
(last[i]
!=-
1
&&
last[i]
!=
g[i])              
return
 
false
;     
return
 
true
;}
void
 turn1(){     
for
(
int
 i
=
1
; i
<=
n; i
++
)           g[i]
=!
g[i];}
void
 turn2(){     
for
(
int
 i
=
1
; i
<=
n; i
+=
2
)          g[i]
=!
g[i];}
void
 turn3(){     
for
(
int
 i
=
2
; i
<=
n;i
+=
2
)             g[i]
=!
g[i];}
void
 turn4(){          
for
(
int
 i
=
0
,k
=
1
; k
<=
n;)     {           g[k]
=!
g[k];           i
++
;           k
=
3
*
i
+
1
;     }}
int
 main(){    fin
>>
n;    fin
>>
c;    vector
<
string
>
 vec;    
string
 s;    fill_n(f,
sizeof
 f,
1
);    fill_n(last,
sizeof
 last, 
-
1
);    
while
(fin
>>
t,t
!=-
1
)last[t]
=
1
;    
while
(fin
>>
t,t
!=-
1
)last[t]
=
0
;    
int
 i1, i2, i3, i4,i;    
for
(i1
=
0
; i1
<=
1
; i1
++
)    
for
(i2
=
0
; i2
<=
1
; i2
++
)    
for
(i3
=
0
; i3
<=
1
; i3
++
)    
for
(i4
=
0
; i4
<=
1
; i4
++
){              
if
( c
>=
(i1
+
i2
+
i3
+
i4)
&&
(c
-
(i1
+
i2
+
i3
+
i4))
%
2
==
0
 ){                      
for
(i
=
1
; i
<=
n;i
++
)                              g[i]
=
f[i];                      
if
(i1)turn1();                      
if
(i2)turn2();                      
if
(i3)turn3();                      
if
(i4)turn4();                                            
if
(judge()){                           
for
(s
=
""
,i
=
1
; i
<=
n; i
++
)                                 s
+=
'
0
'
+
g[i];                           vec.push_back(s);                      }              }    }        sort(vec.begin(),vec.end());    
if
(vec.size()
==
0
)fout
<<
"
IMPOSSIBLE
"
<<
endl;    
else
{       
for
(i
=
0
; i
<
vec.size(); i
++
)                fout
<<
vec[i]
<<
endl;       }                   
return
 
0
;}