首先可以看出第一个栈和第二个栈是没什么交集的,那么第一步是对这些元素分别归到两个栈里,

当存在k使i<j<k,a[k]<a[i]<a[j]时,i,j是不能放在一个栈里的,需要一种数据结构表示这种关系,建成图,用二分图的方法判断一下,尽量放到第一个栈里面;

然后就是模拟一下;

自己写无从下手,只好看别人题解后发上来;

 #include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<cstdlib>
#include<stack>
using namespace std;
const int maxn=+,inf=;
int n,a[maxn],ma[maxn][maxn],f[maxn],color[maxn];
void NO_ANSWER(){
printf("");
exit();
}
int x[maxn],y[maxn],topx=,topy=;
void dfs(int x,int c){
color[x]=c;
for(int i=;i<=n;i++){
if(ma[x][i]){
if(!color[i])dfs(i,-c);
else if(color[i]==c)NO_ANSWER();
}
}
}
void init(){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
f[n+]=inf;
for(int i=n;i>=;i--)f[i]=min(f[i+],a[i]);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(a[i]<a[j]&&f[j+]<a[i])
ma[i][j]=ma[j][i]=;
for(int i=;i<=n;i++)if(!color[i])dfs(i,);
}
void work(){
int now=;
for(int i=;i<=n;i++){
if(color[i]==){
x[++topx]=a[i];
printf("a ");
}
else {
y[++topy]=a[i];
printf("c ");
}
while((topx&&x[topx]==now)||(topy&&y[topy]==now)){
if(topx&&x[topx]==now){
topx--;printf("b ");
}
else {topy--;printf("d ");}
now++;
}
}
}
int main(){
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
init();
work();
return ;
}

因为看别人代码写的,所以比较类似。

最新文章

  1. owner:轻松管理java项目配置
  2. 数据库表结构设计方法及原则(li)
  3. SQL DEFAULT 约束
  4. Runner站立会议02
  5. ES6转ES5:Gulp+Babel
  6. std::function,std::bind
  7. 纯css代码写旋转动画
  8. oracle存储过程返回数据集结果
  9. 给WebApp加一个“壳”,实现Andriod系统添加到桌面
  10. C/C++基础知识总结——C++简单程序设计
  11. String 操作
  12. marked插件在线实时解析markdown的web小工具
  13. JavaScript sort() 方法详解
  14. Java基础——集合(持续更新中)
  15. [Swift]LeetCode101. 对称二叉树 | Symmetric Tree
  16. LNMP一键包安装后解决MySQL无法远程连接问题
  17. Convert List&lt;Entity&gt; to Json String.
  18. IO流(5)—缓冲流
  19. Django框架----数据库表的单表查询
  20. HDU 1590 Searching(求复数向量和的极限)

热门文章

  1. windows服务器记录3389远程桌面IP策略
  2. Oracle中建表空间以及用户
  3. Java 控制台执行带自定义包定义的类,出现“Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: ConnectSQLServer (wrong name: sine/ConnectSQLServer)”
  4. 【转】Winform下KeyDown,KeyPress,KeyUp事件的总结
  5. eclipse+cdt+minGW (C/C++ 编译)
  6. OC中的NSNumber、NSArray、NSString的常用方法
  7. C#取枚举描述
  8. Python实现PLA(感知机)
  9. Python实现LR(逻辑回归)
  10. Oracle小技巧