水题hiho114

wa了无数次,没有看清题意:一定和一定不

#include <cstdio>
#include <cstring>
const int N=100100;
int goal[N];
int bombs[N];
int ans[N];
int n;
int count;
void dfs(int id){
    if(id==n) {
         if(goal[id-1]==bombs[id-1]+bombs[id-2]) {
              if(count==0){
                  for(int i=0;i<n;i++) ans[i]=bombs[i];    
                } 
                else{
                      for(int i=0;i<n;i++){
                             if(ans[i]!=bombs[i]) ans[i]=2;
                      }
                }
                count++;
         }
         return ;
    }
    bombs[id]=goal[id-1]-bombs[id-1]-bombs[id-2];
    if((bombs[id]==0)||(bombs[id]==1)){
        dfs(id+1);
    }
}
int main(){
    int t;
    int numb1,numb2;
    for(scanf("%d",&t);t--;){
        scanf("%d",&n);
        for(int i=0;i<n;i++) scanf("%d",&goal[i]);
        count = 0;
        if(n==1){
            if(goal[0]>0) printf("1 1\n0\n");
            else printf("0\n1 1\n");
            continue;
        }
        else if(goal[0]>0){
            bombs[0]=1;
            bombs[1]=goal[0]-1;
            dfs(2);
            if(goal[0]==1){
                 bombs[0]=0;
                 bombs[1]=1;
                 dfs(2);    
            }
        }
        else{
            bombs[0]=0;
            bombs[1]=0;
            dfs(2);
        }
        numb1 = numb2 = 0;
        for(int i=0;i<n;i++) {
            if(ans[i]==1) numb1++;
            else if(ans[i]==0) numb2++;
        }
        printf("%d",numb1);
        for(int i=0;i<n;i++) if(ans[i]==1) printf(" %d",i+1);
        printf("\n%d",numb2);
        for(int i=0;i<n;i++) if(ans[i]==0) printf(" %d",i+1);
        printf("\n");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/redipS/p/5810360.html