模拟有反例吗

P1155 [NOIP2008 提高组] 双栈排序

@[文刀日天文](/space/show?uid=47722) 编辑框上面倒数第五个插入代码可能会整洁一些
by SofanHe @ 2018-03-24 11:09:00


```cpp include<iostream> include<cstring> using namespace std; int n,sk1[10001],top1,sk2[10001],top2,sk3[10001],top3, a[10001],nowa=1,ans[10001],sum; bool can=1; void out(int a) {if(a==1) cout<<"a "; if(a==2) cout<<"b "; if(a==3) cout<<"c "; if(a==4) cout<<"d "; } void gai() {bool x=0; while(a[nowa]==sk3[top3]+1) {ans[++sum]=1; ans[++sum]=2; sk3[++top3]=a[nowa]; nowa++; x=1; } while(sk1[top1]==sk3[top3]+1) {ans[++sum]=2; sk3[++top3]=sk1[top1--]; x=1; } while(sk2[top2]==sk3[top3]+1) {ans[++sum]=4; sk3[++top3]=sk2[top2--]; x=1; } if(x)//每改一次都可能产生其他改动 gai(); else return; } int main() {cin>>n; memset(a,0x3f,sizeof(a)); for(int i=1;i<=n;i++) {cin>>a[i]; } sk1[top1]=sk2[top2]=1e5;//栈内为空则可以压入 while(top3!=n) {gai(); while(a[nowa]<sk1[top1]) {ans[++sum]=1; sk1[++top1]=a[nowa++]; } gai(); if(a[nowa]<sk2[top2])//while->if尽量不用第二个栈 {ans[++sum]=3; sk2[++top2]=a[nowa++]; } gai(); if(a[nowa]>sk1[top1]&&a[nowa]>sk2[top2]&&nowa<n) {can=0; break; } } if(can) for(int i=1;i<=sum;i++) {out(ans[i]); } else cout<<0; } ```
by 文刀日天文 @ 2018-03-26 15:03:16


您的代码实在是太有趣了
by 探索者 @ 2018-08-13 08:14:59


太让人感到舒适了
by Ousmane_Dembele @ 2018-08-17 15:57:17


抱歉,看到你前后发的两段代码笑出了声
by BuXiangJuanLe @ 2018-08-27 13:34:44


您的代码实在是太有趣了
by LonelinessMan @ 2018-12-24 19:36:28


10 10 2 8 1 7 9 3 4 5 6
by BrandonSoong @ 2019-09-28 23:09:06


贪心%你会爆30分
by hanzhongtlx @ 2019-11-04 16:46:29


|