想拿暴力的dfs求助

P1155 [NOIP2008 提高组] 双栈排序

```cpp #include<bits/stdc++.h> using namespace std; const int MAXN=1005; int n,a[MAXN],b[MAXN],c[MAXN*2],cnt,mul; stack<int>s1,s2; void dfs(int k) { if(mul==n) { bool flag=1; for(int i=1;i<=n;i++) if(b[i]!=i) { flag=0; break; } if(flag) { for(int i=1;i<=k;i++) cout<<char(c[i]+'a'-1)<<" "; cout<<endl; exit(0); } } cnt++; c[k]=1; s1.push(a[cnt]); dfs(k+1); s1.pop(); cnt--; mul++; if(!s1.empty()) { c[k]=2; b[mul]=s1.top(); s1.pop(); dfs(k+1); s1.push(b[mul]); } mul--; cnt++; c[k]=3; s2.push(a[cnt]); dfs(k+1); s2.pop(); cnt--; mul++; if(!s2.empty()) { c[k]=4; b[mul]=s2.top(); s2.pop(); dfs(k+1); s2.push(b[mul]); } mul--; } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; if(i>=3&&a[i]>a[i-1]&&a[i-1]>a[i-2]&&a[i-2]!=1) { cout<<0<<endl; return 0; } } dfs(1); return 0; } ``` 改了一部分,仍然不对
by 二叉苹果树 @ 2022-09-03 10:07:37


```cpp #include<bits/stdc++.h> using namespace std; const int N=1005,M=1e6+5; int ver[M],Next[M],head[M],tot; void add(int u,int v) { ver[++tot]=v,Next[tot]=head[u],head[u]=tot; } int a[N],k[N]; int fail,vis[N]; int st1[N],st2[N],t1,t2; void dfs(int x,int c) { vis[x]=c; for(int i=head[x];i;i=Next[i]) { if(!vis[ver[i]])dfs(ver[i],3-c); else if(vis[ver[i]]==c)fail=1; } } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); int MIN=1e8; for(int i=n;i;i--)k[i]=MIN,MIN=min(MIN,a[i]); for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) if(a[i]<a[j]&&a[i]>k[j]) add(i,j),add(j,i); for(int i=1;i<=n;i++)if(!vis[i])dfs(i,1); if(fail){printf("%d",0);return 0;} int now=1; st1[0]=st2[0]=1e8; for(int i=1;i<=n;i++) if(vis[i]==1) { while(st1[t1]==now) t1--,printf("%c ",'b'),now++; if(a[i]>st1[t1])while(st2[t2]==now)t2--,printf("%c ",'d'),now++; while(st1[t1]==now) t1--,printf("%c ",'b'),now++; st1[++t1]=a[i],printf("%c ",'a'); } else { while(1) if(st1[t1]==now) t1--,printf("%c ",'b'),now++; else if(st2[t2]==now) t2--,printf("%c ",'d'),now++; else break; st2[++t2]=a[i],printf("%c ",'c'); } while(1) if(st1[t1]==now) t1--,printf("%c ",'b'),now++; else if(st2[t2]==now) t2--,printf("%c ",'d'),now++; else break; return 0; } ``` @[Binary_Apple_Tree](/user/270854)
by 已注销!^sZA2#G @ 2022-09-03 10:09:59


|