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; }