双栈排序

思路:

  二分图染+模拟;

代码:

#include <bits/stdc++.h>
using namespace std;
#define maxn 1005
#define maxm 2000005
int n,head[maxn],E[maxm],V[maxm],cnt,col[maxn];
int minn[maxn],ai[maxn],sta1[maxn],sta2[maxn],top1,top2;
bool if_[maxn][maxn];
inline void in(int &now)
{char Cget=getchar();now=0;while(Cget>'9'||Cget<'0')Cget=getchar();while(Cget>='0'&&Cget<='9'){now=now*10+Cget-'0';Cget=getchar();}
}
void edge_add(int u,int v)
{E[++cnt]=head[u],V[cnt]=v,head[u]=cnt;E[++cnt]=head[v],V[cnt]=u,head[v]=cnt;
}
bool dfs(int now,int dis,int fa)
{if(col[now]) return true;col[now]=dis+1;for(int i=head[now];i;i=E[i]){if(V[i]==fa) continue;if(dfs(V[i],dis^1,now)) return true;}return false;
}
int main()
{in(n);for(int i=1;i<=n;i++) in(ai[i]);minn[n]=ai[n];for(int i=n-1;i>=1;i--) minn[i]=min(minn[i+1],ai[i]);for(int i=1;i<n;i++){for(int j=i+1;j<n;j++){if(minn[j+1]<ai[i]&&ai[i]<ai[j]){if(!if_[i][j]){if_[i][j]=true;if_[j][i]=true;edge_add(i,j);}}}}for(int i=1;i<=n;i++){if(!col[i]){if(dfs(i,0,0)){printf("0");return 0;}}}int now=1;for(int i=1;i<=n;i++){if(ai[i]>now){if(col[i]==1) putchar('a'),sta1[++top1]=ai[i];else putchar('c'),sta2[++top2]=ai[i];}else{now++;if(col[i]==1) printf("a b");else printf("c d");while(1){if(sta1[top1]==now) {printf(" b"),top1--;now++;continue;}if(sta2[top2]==now) {printf(" d"),top2--;now++;continue;}break;}}if(i!=n) putchar(' ');}while(top1--) printf(" b");while(top2--) printf(" d");return 0;
}

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6973923.html

AC日记——双栈排序 洛谷 P1155相关推荐

  1. AC日记——[SDOI2010]大陆争霸 洛谷 P3690

    [SDOI2010]大陆争霸 思路: dijkstra模板: 代码: #include <bits/stdc++.h> using namespace std; #define maxn ...

  2. AC日记——凌乱的yyy 洛谷 P1803

    题目背景 快noip了,yyy很紧张! 题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加 ...

  3. AC日记——最大子段和 洛谷 P1115

    题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000 ...

  4. AC日记——神奇的幻方 洛谷 P2615(大模拟)

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,--,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  5. 二分图——洛谷P1155 双栈排序

    https://daniu.luogu.org/problem/show?pid=1155 二分图染色+模拟 1.首先考虑一个简单情况--单栈排序,显然有这样的一个事实: a[i]和a[j] 不能压入 ...

  6. 洛谷——P1155 双栈排序

    题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...

  7. P1155 双栈排序(二分图的染色判断+链式前向星)

    P1155 双栈排序 让字典序最小,当然尽量进S1 那什么时候必须进S2呢? a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i<j<k且a[k]<a[i]<a[j] 因 ...

  8. P1155 双栈排序(二分图染色)

    P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一 ...

  9. P1155 双栈排序

    P1155 双栈排序 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S ...

最新文章

  1. Kubernetes 1.3版本之简单安装
  2. torch.tensordot()介绍
  3. ASP.NET常见错误,原因及解决方法(2003版)_不断更新.....
  4. 建行参考码大全ybla_52度五粮液价格表大全 不同系列价钱盘点
  5. 切换图片 ImageSwitcher
  6. 一起谈.NET技术,asp.net页面中输出变量、Eval数据绑定等总结
  7. Android基于讯飞语音SDK实现语音识别
  8. Julia(编程语言)
  9. json特殊符号 java_java 特殊符号转json出错
  10. 论文:Object-centric Auto-encoders and Dummy Anomalies for Abnormal Event Detection in Video阅读遇到的问题及解答
  11. studio 和mac快捷键
  12. 基于知识图谱的知识泛化让AI学会“举一反三”
  13. Java实习生常规技术面试题每日十题Java基础(六)
  14. 苹果13防水吗 苹果13颜色哪个好看
  15. OpenCV——PS 滤镜, 浮雕效果
  16. Ubuntu下校园网锐捷客户端的连接
  17. Python地学分析 — 建立矢量数据缓冲区 06
  18. 软件测试工程师-面试如何使用代码进行接口测试?
  19. CVPR 2022 | 基于稀疏 Transformer 的单步三维目标识别器
  20. IE和chrom兼容性分析(持续更新)

热门文章

  1. 计算机程序中断方式有几种,奥鹏离线作业计算机组成原理一、简答题1、请说明程序查询方式与中断方式各自的特点.2、提高存储器速度可采用哪些措施,请说出...
  2. 北航研究生计算机系论文手册,计算机学院-北航研究生院-北京航空航天大学.doc...
  3. 有道翻译 excel webservice 失效_VBA实践+excel英文逐句自动有道翻译为中文
  4. linux主机拷贝文件到另一台主机
  5. c语言字符串67ASDSff,(指针编程题目.doc
  6. mysql模糊查询后分页_jsp模糊查询后的数据进行分页,但点击下一页后就查询全部的了...
  7. 如何用python的i2c教程_使用Raspberry pi3(Python)的I2C用法
  8. python自带编译器如何生成exe_别再问我怎么Python打包成exe了!
  9. 信息系统项目管理师为什么不建议自学
  10. Nginx映射本地静态资源时,浏览器提示跨域问题解决