求助,调了一个月了

P1092 [NOIP2004 提高组] 虫食算

本贴结。 已调出。
by End1essSummer @ 2022-05-04 17:14:09


最终代码: ```cpp #include<bits/stdc++.h> using namespace std; int a[30],b[30],c[30],nex[30],nextop,num[30],n; char sta[30],stb[30],stc[30]; bool nu[30]; bool CP(){ for(int i=1;i<=n;i++){ if(num[a[i]]==-1||num[b[i]]==-1||num[c[i]]==-1){ continue; }else{ int t=num[a[i]]+num[b[i]]; if(!(((t+1)%n!=num[c[i]])^((t)%n!=num[c[i]]))){ return 1; } } }return 0; }bool J(){ for(int i=1,x=0;i<=n;i++){ int t=(num[a[i]]+num[b[i]]+x); if(t%n!=num[c[i]]){ return 1; }x=t/n; }return 0; }void init(){ for(int i=1;i<=n;i++){ a[i]=(sta[n-i]-'A')+1; b[i]=(stb[n-i]-'A')+1; c[i]=(stc[n-i]-'A')+1; }return; }void print(){ for(int i=1;i<n;i++){ cout<<num[i]<<" "; }cout<<num[n]<<"\n"; exit(0); }void dfs(int step){ if(CP()) return; if(step==n+1){ if(J()) return; else{ print(); return; } }else{ for(int i=n-1;i>=0;i--){ if(!nu[i]){ nu[i]=1; num[nex[step]]=i; dfs(step+1); num[nex[step]]=-1; nu[i]=0; } } } }void GN(int x){ if(!nu[x]){ nu[x]=1; nextop++; nex[nextop]=x; }return; }int main(){ //cout<<1<<" "; scanf("%d",&n); scanf("%s",sta); scanf("%s",stb); scanf("%s",stc); //cout<<sta<<'\n'<<stb<<'\n'<<stc<<'\n'; for(int i=n-1;i>=0;i--){ num[i]=-1; }init(); for(int i=1;i<=n;i++){ GN(a[i]); GN(b[i]); GN(c[i]); }memset(nu,0,sizeof(nu)); dfs(1); return 0; } ```
by End1essSummer @ 2022-05-04 17:16:43


@[x1a0kr](/user/453460) 大佬太执着了,点赞!
by LiuTianyou @ 2022-07-06 09:47:51


|