Party Lamps chapter 2.2
生活随笔
收集整理的這篇文章主要介紹了
Party Lamps chapter 2.2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? 又是來回2次等于沒按,一個結構體 no3odd,speodd,no3even,speeven代表非-1%3 奇數偶數,普通奇數偶數。
然后當按1-4次時,歸納出1次對應4種情況,2次對應0次和2種各一次(1+6),3次對應(1,3)(4+4),4次對應(0,2,4)(1+6+4)
超過4以后的偶數情況等同于4,偶數等同于3
?
隨后根據C取值枚舉便可
?
/*ID: hubiao cavePROG: lampsLANG: C++*/#include<iostream>#include<fstream>#include<string> #include<set>using namespace std;struct Bu {bool no3even;bool speeven;bool no3odd;bool speodd;Bu(){}Bu(int _noev,int _spee,int _no,int _sp):no3even(_noev),speeven(_spee),no3odd(_no),speodd(_sp){;} };Bu buf[4][6]={{Bu(0,0,0,0),Bu(1,1,0,0),Bu(0,0,1,1),Bu(1,0,1,0)} ,{Bu(0,0,1,1),Bu(1,1,0,0),Bu(0,1,0,1),Bu(0,0,0,0),Bu(1,0,0,1),Bu(0,1,1,0)} ,{Bu(1,1,1,1),Bu(0,1,1,0),Bu(1,0,0,1),Bu(0,1,0,1)} ,{Bu(1,0,1,0)}}; /* 只按1次,4種 只按2次 可能是兩種燈6,也可能是1種燈重復相當沒按0 只按3次 同理相當于1種等,或者3種燈 只按4次 相當0,2,4 往后奇數次 與只按3相同,偶數次與4相同 */set<string> ss;int main(){ifstream fin("lamps.in");ofstream fout("lamps.out");int no3even=-1,speeven=-1,no3odd=-1,speodd=-1;int N,C;fin>>N>>C;int lampOn,lampOff;while(fin>>lampOn,lampOn!=-1){if(lampOn%2==0){if((lampOn-1)%3==0){speeven=1;continue;}else{no3even=1;continue;}}else{if((lampOn-1)%3==0){speodd=1;continue;}else{no3odd=1;continue;}}}while(fin>>lampOff,lampOff!=-1){if(lampOff%2==0){if((lampOff-1)%3==0){if(speeven==1){fout<<"IMPOSSIBLE"<<endl;return 0;}speeven=0;continue;}else{if(no3even==1){fout<<"IMPOSSIBLE"<<endl;return 0;}no3even=0;continue;}}else{if((lampOff-1)%3==0){if(speodd==1){fout<<"IMPOSSIBLE"<<endl;return 0;}speodd=0;continue;}else{no3odd=0;if(no3odd==1){fout<<"IMPOSSIBLE"<<endl;return 0;}continue;}}}if(C==0){if(no3even==0||no3odd==0||speodd==0||speeven==0){fout<<"IMPOSSIBLE"<<endl;return 0;}string str;for(int i=1;i<=N;++i){str+='1';}fout<<str<<endl;return 0;}if(C<=4){switch(C%4){case 1:{for(int i=0;i<=3;i++){if(buf[0][i].no3even!=no3even){if(no3even!=-1)continue;}if(buf[0][i].speeven!=speeven){if(speeven!=-1)continue;}if(buf[0][i].no3odd!=no3odd){if(no3odd!=-1)continue;}if(buf[0][i].speodd!=speodd){if(speodd!=-1)continue;}string str;for(int i=1;i<=N;i++){if(i%2==0){if((i-1)%3==0)str+='0'+buf[0][i].speeven;elsestr+='0'+buf[0][i].no3even;}else{if((i-1)%3==0)str+='0'+buf[0][i].speodd;elsestr+='0'+buf[0][i].no3odd;}}ss.insert(str);}break;}case 2:{string str;for(int i=1;i<=N;i++){str+='1';if(i==N)ss.insert(str);}for(int i=0;i<=5;i++){if(buf[1][i].no3even!=no3even){if(no3even!=-1)continue;}if(buf[1][i].speeven!=speeven){if(speeven!=-1)continue;}if(buf[1][i].no3odd!=no3odd){if(no3odd!=-1)continue;}if(buf[1][i].speodd!=speodd){if(speodd!=-1)continue;}string str;for(int i=1;i<=N;i++){if(i%2==0){if((i-1)%3==0)str+='0'+buf[1][i].speeven;elsestr+='0'+buf[1][i].no3even;}else{if((i-1)%3==0)str+='0'+buf[1][i].speodd;elsestr+='0'+buf[1][i].no3odd;}}ss.insert(str);}break;}case 3:{for(int i=0;i<=3;i++){if(buf[0][i].no3even!=no3even){if(no3even!=-1)continue;}if(buf[0][i].speeven!=speeven){if(speeven!=-1)continue;}if(buf[0][i].no3odd!=no3odd){if(no3odd!=-1)continue;}if(buf[0][i].speodd!=speodd){if(speodd!=-1)continue;}string str;for(int j=1;j<=N;j++){if(j%2==0){if((j-1)%3==0)str+='0'+buf[0][i].speeven;elsestr+='0'+buf[0][i].no3even;}else{if((j-1)%3==0)str+='0'+buf[0][i].speodd;elsestr+='0'+buf[0][i].no3odd;}}ss.insert(str);}for(int i=0;i<=3;i++){if(buf[2][i].no3even!=no3even){if(no3even!=-1)continue;}if(buf[2][i].speeven!=speeven){if(speeven!=-1)continue;}if(buf[2][i].no3odd!=no3odd){if(no3odd!=-1)continue;}if(buf[2][i].speodd!=speodd){if(speodd!=-1)continue;}string str;for(int j=1;j<=N;j++){if(j%2==0){if((j-1)%3==0)str+='0'+buf[2][i].speeven;elsestr+='0'+buf[2][i].no3even;}else{if((j-1)%3==0)str+='0'+buf[2][i].speodd;elsestr+='0'+buf[2][i].no3odd;}}ss.insert(str);}break;}case 0:{string str;for(int i=1;i<=N;i++){str+='1';if(i==N)ss.insert(str);}for(int i=0;i<=5;i++){if(buf[1][i].no3even!=no3even){if(no3even!=-1)continue;}if(buf[1][i].speeven!=speeven){if(speeven!=-1)continue;}if(buf[1][i].no3odd!=no3odd){if(no3odd!=-1)continue;}if(buf[1][i].speodd!=speodd){if(speodd!=-1)continue;}string str;for(int j=1;j<=N;j++){if(j%2==0){if((j-1)%3==0)str+='0'+buf[1][i].speeven;elsestr+='0'+buf[1][i].no3even;}else{if((j-1)%3==0)str+='0'+buf[1][i].speodd;elsestr+='0'+buf[1][i].no3odd;}}ss.insert(str);}for(int i=0;i<1;i++){if(buf[3][i].no3even!=no3even){if(no3even!=-1)continue;}if(buf[3][i].speeven!=speeven){if(speeven!=-1)continue;}if(buf[3][i].no3odd!=no3odd){if(no3odd!=-1)continue;}if(buf[3][i].speodd!=speodd){if(speodd!=-1)continue;}string str;for(int j=1;j<=N;j++){if(j%2==0){if((j-1)%3==0)str+='0'+buf[3][i].speeven;elsestr+='0'+buf[3][i].no3even;}else{if((j-1)%3==0)str+='0'+buf[3][i].speodd;elsestr+='0'+buf[3][i].no3odd;}}ss.insert(str);}}break;}}else{if(C%2){for(int i=0;i<=3;i++){if(buf[0][i].no3even!=no3even){if(no3even!=-1)continue;}if(buf[0][i].speeven!=speeven){if(speeven!=-1)continue;}if(buf[0][i].no3odd!=no3odd){if(no3odd!=-1)continue;}if(buf[0][i].speodd!=speodd){if(speodd!=-1)continue;}string str;for(int j=1;j<=N;j++){if(j%2==0){if((j-1)%3==0)str+='0'+buf[0][i].speeven;elsestr+='0'+buf[0][i].no3even;}else{if((j-1)%3==0)str+='0'+buf[0][i].speodd;elsestr+='0'+buf[0][i].no3odd;}}ss.insert(str);}for(int i=0;i<=3;i++){if(buf[2][i].no3even!=no3even){if(no3even!=-1)continue;}if(buf[2][i].speeven!=speeven){if(speeven!=-1)continue;}if(buf[2][i].no3odd!=no3odd){if(no3odd!=-1)continue;}if(buf[2][i].speodd!=speodd){if(speodd!=-1)continue;}string str;for(int i=1;i<=N;i++){if(i%2==0){if((i-1)%3==0)str+='0'+buf[2][i].speeven;elsestr+='0'+buf[2][i].no3even;}else{if((i-1)%3==0)str+='0'+buf[2][i].speodd;elsestr+='0'+buf[2][i].no3odd;}}ss.insert(str);}}else{if(no3even==0||no3odd==0||speodd==0||speeven==0){;}else{string str;for(int i=1;i<=N;i++){str+='1';if(i==N)ss.insert(str);}}for(int i=0;i<=5;i++){if(buf[1][i].no3even!=no3even){if(no3even!=-1)continue;}if(buf[1][i].speeven!=speeven){if(speeven!=-1)continue;}if(buf[1][i].no3odd!=no3odd){if(no3odd!=-1)continue;}if(buf[1][i].speodd!=speodd){if(speodd!=-1)continue;}string str;for(int j=1;j<=N;j++){if(j%2==0){if((j-1)%3==0)str+='0'+buf[1][i].speeven;elsestr+='0'+buf[1][i].no3even;}else{if((j-1)%3==0)str+='0'+buf[1][i].speodd;elsestr+='0'+buf[1][i].no3odd;}}ss.insert(str);}for(int i=0;i<1;i++){if(buf[3][i].no3even!=no3even){if(no3even!=-1)continue;}if(buf[3][i].speeven!=speeven){if(speeven!=-1)continue;}if(buf[3][i].no3odd!=no3odd){if(no3odd!=-1)continue;}if(buf[3][i].speodd!=speodd){if(speodd!=-1)continue;}string str;for(int j=1;j<=N;j++){if(j%2==0){if((j-1)%3==0)str+='0'+buf[3][i].speeven;elsestr+='0'+buf[3][i].no3even;}else{if((j-1)%3==0)str+='0'+buf[3][i].speodd;elsestr+='0'+buf[3][i].no3odd;}}ss.insert(str);}}}if(ss.empty()){fout<<"IMPOSSIBLE"<<endl;return 0;}for(set<string>::iterator it=ss.begin();it!=ss.end();it++){fout<<*it<<endl;}return 0;}?
轉載于:https://www.cnblogs.com/cavehubiao/p/3306570.html
總結
以上是生活随笔為你收集整理的Party Lamps chapter 2.2的全部內容,希望文章能夠幫你解決所遇到的問題。