10分求助!

P1139 单向双轨道

现在20分。。。 ```cpp #include<bits/stdc++.h> #define pc putchar using namespace std; int n,will[30],deep,ans1[100],ans2[100],ans3[100],st[4][30],cnt[30]; char str[30]; void dfs(int now){ if(cnt[3]&&st[3][cnt[3]]!=cnt[3]) return; if(deep-now<cnt[0]+cnt[1]+cnt[2]) return; if(now==deep&&cnt[3]==n){ for(int i=0;i<now;i++) printf("%c %c %c\n",ans1[i]+96,ans2[i]+65,ans3[i]+65); exit(0); } if(now>=deep) return; for(int i=0;i<3;i++){ if(!cnt[i]) continue; for(int j=i+1;j<4;j++){ int t=st[i][cnt[i]--]; ans1[now]=t;ans2[now]=i;ans3[now]=j; st[j][++cnt[j]]=t; dfs(now+1); cnt[j]--; st[i][++cnt[i]]=t; } } } int main(){ scanf("%d%s",&n,str+1); for(int i=n;i>=1;i--) st[0][++cnt[0]]=str[i]-96; for(deep=n;deep<=3*n;deep++) dfs(0); printf("NO"); return 0; } ```
by YuRuochen @ 2022-11-04 22:08:00


|