即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

CODEVS-2050 派对灯

编程语言 qq_34600424 25℃ 0评论

2017-6-8

题目描述

给你n盏开着的灯,开关的次数,以及部分灯最后的状态,求出所有可能的情况

解答

史上最长的代码
同一个按钮按奇数次都是一样的,按偶数次也都是一样的

代码

#include
#include
#include
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;i1];
                              k++;
                            }
                        }
                    }
                    else if (c==1){
                        if (cal()==1){
                           re();
                           if (tru()){
                              for (int i=0;i1];
                              k++;
                            }
                        }
                    }
                    else if (c==2){
                          if (cal()==0){
                            if (tru()){
                               for (int i=0;i1];
                               k++;
                            }
                          }
                          else if (cal()==2){
                            re();
                            if (tru()){
                              for (int i=0;i1];
                              k++;
                            }
                        }
                    }
                    else{
                         if (c%2==0){
                              if (cal()==0){
                              if (tru()){
                               for (int i=0;i1];
                               k++;
                            }
                          }
                            else if (cal()==2){
                               re();
                               if (tru()){
                               for (int i=0;i1];
                               k++;
                               }
                          }
                            else if (cal()==4){
                                 re();
                             if (tru()){
                              for (int i=0;i1];
                              k++;
                             }
                           }
                        }
                        else{
                            if (cal()==1){
                               re();
                               if (tru()){
                               for (int i=0;i1];
                               k++;
                            }
                          }
                           else if (cal()==3){
                             re();
                             if (tru()){
                               for (int i=0;i1];
                                k++;
                            }
                        }
                    }
                }
            }
        }
   }
}

void out(){
  if (k==0) cout<<"IMPOSSIBLE"<int i,j;
  for (i=0;i'\0';
  for (i=0;ichar t[N+1];
  for (i=0;i1;i++){
    for (j=0;j1;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;icout<int main(){
    cin>>n>>c;
    init();
    res();
    out();
}

转载请注明:CodingBlog » CODEVS-2050 派对灯

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情