1 条题解
-
0
考点其实比较老套了
因为任意一个按键按偶数次就等于没按
所以4个枚举每个开关按还是不按
判断一下枚举的按的次数是否和c的奇偶性相同
相同的话就简单了,因为起始都开灯,模拟就是了
然后和题目给的状态对比,可行就存下来
当然我写的是比较好看的(除了没有加空格)
#include <bits/stdc++.h> using namespace std; const int maxn=109; int n,c; int a[maxn],b[maxn],top; string f[maxn]; void run() { string temp=""; for(int i=1;i<=n;i++) temp+=char(b[i]+'0'); f[++top]=temp; } int main() { cin >> n >> c; int ok; memset(a,-1,sizeof(a)); while( cin >> ok && ok!=-1 ) a[ok]=1;//亮着 while( cin >> ok && ok!=-1 ) a[ok]=0;//熄灭 for(int i=0;i<=1;i++) { for(int j=0;j<=1;j++) for(int q=0;q<=1;q++) for(int w=0;w<=1;w++) { if(i+j+q+w>c) continue;//次数太多 if( (i+j)%2==(q+w)%2&&c%2==1 )//那么i+j+q是偶数 continue; if( (i+j)%2!=(q+w)%2&&c%2==0 )//那么i+j+q是奇数 continue; for(int i=1;i<=n;i++) b[i]=1;//初始都是开灯 if(i) for(int i=1;i<=n;i++) b[i]^=1; if(j) for(int i=1;i<=n;i+=2) b[i]^=1; if(q) for(int i=2;i<=n;i+=2) b[i]^=1; if(w) for(int i=1;i<=n;i+=3) b[i]^=1; int flag=1; for(int s=1;s<=n;s++) { if( a[s]==-1 ) continue; if( a[s]!=b[s] ) flag=0; } if(flag) run(); } } sort(f+1,f+1+top); if( top==0 ) cout<<"IMPOSSIBLE"; else for(int i=1;i<=top;i++) cout<<f[i]<<endl; }
- 1
信息
- ID
- 1005
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 9
- 标签
- 递交数
- 8
- 已通过
- 8
- 上传者