USACO-Section2.2 Party Lamps
生活随笔
收集整理的這篇文章主要介紹了
USACO-Section2.2 Party Lamps
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2017-9-2
題目描述
給出部分燈最后的狀態以及按的次數,求出可能的結果解答
注意題意的理解,我對最后的結果進行了排序代碼
/* ID: 18795871 PROG: lamps LANG: C++ */ #include<iostream> #include<fstream> #include<cstring> #include<cstdio> using namespace std;ifstream fin("lamps.in"); ofstream fout("lamps.out");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;fin>>m;while (m!=-1) {f[m]=1;fin>>m;}fin>>m;while (m!=-1) {f[m]=-1;fin>>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) fout<<"IMPOSSIBLE"<<endl;int i,j;for (i=0; i<k; i++) y[i][n]='\0';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++) {fout<<y[i]<<endl;}}int main() {fin>>n>>c;init();res();out();}總結
以上是生活随笔為你收集整理的USACO-Section2.2 Party Lamps的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JPA(二):HellWord工程
- 下一篇: 生成模型与判别模型区别