CODEVS-2050 派对灯
来源:互联网 发布:数控编程指令g代码 编辑:程序博客网 时间:2024/05/16 08:04
2017-6-8
题目描述
给你n盏开着的灯,开关的次数,以及部分灯最后的状态,求出所有可能的情况
解答
史上最长的代码同一个按钮按奇数次都是一样的,按偶数次也都是一样的
代码
#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int N = 100;char x[N+1];int f[N+1];int a[4];int n,c;char y[N+1][N+1];int k=0;void init(){ int m; cin>>m; while (m!=-1){ f[m]=1; cin>>m; } cin>>m; while (m!=-1){ f[m]=-1; cin>>m; }}int cal(){ int sum=0; for (int i=0;i<4;i++){ if (a[i]==1) sum++; } return sum;}void re(){ if (a[0]==1){ for (int i=1;i<=n;i++){ x[i]=(x[i]-'0'+1)%2+'0'; } } if (a[1]==1){ for (int i=1;i<=n;i++){ if (i%2==1) x[i]=(x[i]-'0'+1)%2+'0'; } } if (a[2]==1){ for (int i=1;i<=n;i++){ if (i%2==0) x[i]=(x[i]-'0'+1)%2+'0'; } } if (a[3]==1){ for (int i=1;i<=n;i++){ if (i%3==1) x[i]=(x[i]-'0'+1)%2+'0'; } }}bool tru(){ for (int i=1;i<=n;i++){ if (f[i]==1){ if (x[i]!='1') return false; } else if (f[i]==-1){ if (x[i]!='0') return false; } } return true;}void set(){ for(int i=1;i<=n;i++) x[i]='1';}void res(){ for (a[0]=0;a[0]<=1;a[0]++){ for (a[1]=0;a[1]<=1;a[1]++){ for (a[2]=0;a[2]<=1;a[2]++){ for (a[3]=0;a[3]<=1;a[3]++){ set(); if (c==0){ if (cal()==0){ if (tru()){ for (int i=0;i<n;i++) y[k][i]=x[i+1]; k++; } } } else if (c==1){ if (cal()==1){ re(); if (tru()){ for (int i=0;i<n;i++) y[k][i]=x[i+1]; k++; } } } else if (c==2){ if (cal()==0){ if (tru()){ for (int i=0;i<n;i++) y[k][i]=x[i+1]; k++; } } else if (cal()==2){ re(); if (tru()){ for (int i=0;i<n;i++) y[k][i]=x[i+1]; k++; } } } else{ if (c%2==0){ if (cal()==0){ if (tru()){ for (int i=0;i<n;i++) y[k][i]=x[i+1]; k++; } } else if (cal()==2){ re(); if (tru()){ for (int i=0;i<n;i++) y[k][i]=x[i+1]; k++; } } else if (cal()==4){ re(); if (tru()){ for (int i=0;i<n;i++) y[k][i]=x[i+1]; k++; } } } else{ if (cal()==1){ re(); if (tru()){ for (int i=0;i<n;i++) y[k][i]=x[i+1]; k++; } } else if (cal()==3){ re(); if (tru()){ for (int i=0;i<n;i++) y[k][i]=x[i+1]; k++; } } } } } } } }}void out(){ if (k==0) cout<<"IMPOSSIBLE"<<endl; int i,j; for (i=0;i<k;i++) y[i][n]='\0'; for (i=0;i<k;i++){ } char t[N+1]; for (i=0;i<k-1;i++){ for (j=0;j<k-i-1;j++){ if (strcmp(y[j],y[j+1])>0){ strcpy(t,y[j]); strcpy(y[j],y[j+1]); strcpy(y[j+1],t); } } } for (i=0;i<k;i++){ cout<<y[i]<<endl; }}int main(){ cin>>n>>c; init(); res(); out();}
阅读全文
0 0
- CODEVS-2050 派对灯
- 【USACO2.2.4】派对灯
- 派对
- 派对
- 派对
- jzoj P1163 生日派对灯
- 搜索练习1:派对灯
- 2.2.4 PARTY LAMPS 派对灯
- USACO:2.2.4 Party Lamps 派对灯
- USACO 2.2 派对灯
- 洛谷P1468 派对灯 Party Lamps
- [USACO2.2]Party Lamps派对灯
- 洛谷 P1468 派对灯 Party Lamps
- 【USACO题库】2.2.4 Party Lamps派对灯
- JZOJ1265.【USACO题库】2.2.4 Party Lamps派对灯
- 开心派对.
- 万圣节派对
- 万圣节派对
- timestampdiff在mysql与db2中用法
- gdb中关于break if断点添加位置的探究
- QT的了解过程
- springmvc搭建时的神坑
- 原生select高度兼容ie7--css样式
- CODEVS-2050 派对灯
- 书的复制
- 01_Makefile文件编写
- 设计模式---抽象工厂模式
- 行内元素出现换行的情况
- Linux 目录结构与FHS标准
- 处理post请求乱码问题
- 1-5月知识总结
- Windows 微软雅黑(Microsoft YaHei)+ Monaco 字体整合方案