题面

解题思路

这道题乍一看还以为是个模拟。。怒写一发30分(noip提高组t4有模拟吗?)。

其实很好hack,如

10

10 2 8 1 7 9 3 4 5 6

按模拟的思路,应该是10入第一个栈,2入第一个栈,8入第二个栈,1入第一个栈,把1、2

弹出,所以此时第一个栈还剩10,第二个栈还剩8。7来了入第一个栈,9就无家可归了,这就出问题了,实际上应该让7入第二个栈。结果正解是二分图??像我这样的蒟蒻哪能想出来。。

做法是先选出所有如上的数字对,让他们连边,之后二分图染色,入栈时判断颜色。

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = 1005;
  4. inline int rd(){
  5. int x=0,f=1;char ch=getchar();
  6. while(ch<'0' || ch>'9') {if(ch=='-') f=-1;ch=getchar();}
  7. while(ch>='0' && ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
  8. return x*f;
  9. }
  10. struct Edge{
  11. int nxt,to;
  12. }edge[MAXN<<1];
  13. int n,a[MAXN],col[MAXN];
  14. int head[MAXN],cnt;
  15. bool vis[MAXN];
  16. int st1[MAXN],top1,st2[MAXN],top2,num;
  17. inline void add(int bg,int ed){
  18. edge[++cnt].to=ed;
  19. edge[cnt].nxt=head[bg];
  20. head[bg]=cnt;
  21. }
  22. inline bool dfs(int x){
  23. vis[x]=1;
  24. for(register int i=head[x];i;i=edge[i].nxt){
  25. if(vis[edge[i].to]){
  26. if(col[edge[i].to]==col[x]) return false;
  27. }
  28. else{
  29. col[edge[i].to]=col[x]^1;
  30. if(!dfs(edge[i].to)) return false;
  31. }
  32. }
  33. return true;
  34. }
  35. int main(){
  36. n=rd();
  37. for(register int i=1;i<=n;i++) a[i]=rd();
  38. int k=1e9;
  39. for(register int i=n;i;i--){
  40. k=min(k,a[i]);
  41. for(register int j=1;j<i;j++)
  42. if(a[j]<a[i] && a[j]>k) add(j,i),add(i,j);
  43. }
  44. for(register int i=1;i<=n;i++){
  45. if(!vis[i])
  46. if(!dfs(i)){
  47. puts("0");
  48. return 0;
  49. }
  50. }
  51. num=1;
  52. for(register int i=1;i<=n;i++){
  53. if(col[i]==0){
  54. printf("a ");
  55. st1[++top1]=a[i];
  56. }
  57. else{
  58. printf("c ");
  59. st2[++top2]=a[i];
  60. }
  61. while(st1[top1]==num || st2[top2]==num){
  62. if(st1[top1]==num)
  63. printf("b "),top1--;
  64. else
  65. printf("d "),top2--;
  66. num++;
  67. }
  68. }
  69. while(st1[top1]==num || st2[top2]==num){
  70. if(st1[top1]==num)
  71. printf("b "),top1--;
  72. else
  73. printf("d "),top2--;
  74. num++;
  75. }
  76. return 0;
  77. }

洛谷 P1155 双栈排序的更多相关文章

  1. 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

  2. [NOIP2008] 提高组 洛谷P1155 双栈排序

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

  3. 洛谷——P1155 双栈排序

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

  4. 洛谷P1155 双栈排序

    这题什么毒瘤......之前看一直没思路,然后心说写个暴搜看能有多少分,然后就A了??! 题意:给你一个n排列,求它们能不能通过双栈来完成排序.如果能输出最小字典序方案. [update]这里面加了一 ...

  5. 洛谷P1155 双栈排序(贪心)

    题意 题目链接 Sol 首先不难想到一种贪心策略:能弹则弹,优先放A 然后xjb写了写发现只有\(40\),原因是存在需要决策的情况 比如 \(A = {10}\) \(B = {8}\) 现在进来一 ...

  6. 洛谷P1155 双栈排序——思路题

    题目:https://www.luogu.org/problemnew/show/P1155 思路... 看博客:https://www.cnblogs.com/Narh/p/9213825.html ...

  7. 洛谷$P1155$ 双栈排序 贪心+二分图匹配

    正解:贪心+二分图匹配 解题报告: 传送门$QwQ$ 跪了,,,我本来以为我$NOIp$做得差不多了,,,然后康了一眼发现没做多少啊其实$QAQ$ 然后来康题趴$QwQ$ 首先考虑如果只有一个栈的情况 ...

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

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

  9. P1155 双栈排序

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

随机推荐

  1. MySQL 笔记一

    一.基本语法 1.数据库操作 create database [IF NOT EXIEST ] 数据库名   --创建数据库 drop database  数据库名                   ...

  2. hdu多校第二场1009 (hdu6599) I Love Palindrome String 回文自动机/字符串hash

    题意: 找出这样的回文子串的个数:它本身是一个回文串,它的前一半也是一个回文串 输出格式要求输出l个数字,分别代表长度为1~l的这样的回文串的个数 题解: (回文自动机和回文树是一个东西) 首先用回文 ...

  3. 如何解决nodemon运行报错问题

    原因 nodemon没有被正确安装 解决方法 如果yarn global add nodemon --verbose安装没用的话,然后输入npm i nodemon -g --verbose使用NPM ...

  4. thinkphp一键清除缓存的方法

    后台控制器: <?php namespace Home\Controller; use Think\Controller; class HuancuController extends Cont ...

  5. ~/.bashrc的常用alias设置,30 个方便的 Bash shell 别名

    centos6.5/centos7系统中,alias定义在/etc/bashrc,分别写在/etc/profile.d/*.sh中,可以在此目录添加my.sh,或者~/.bashrc,或者~/.bas ...

  6. jeecms jeecmsv93建库

    create tablespace jeecms93 datafile 'jeecms93.dbf' size 100M reuse autoextend on next 50M;1. 2.drop ...

  7. Mybatis 动态insert动态插入的坑

    在写insert子句的时候,由于不知道需要插入多少字段,mybatis通过prefix,suffix,suffixOverrides很好的解决了该问题,实现了动态insert语句. 用这种动态插入时& ...

  8. spring:bean的细节之三种创建Bean对象的方式

    <!--创建Bean的三种方式--><!--第一种方式,使用默认构造函数创建 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有属性和标签时. 采用的就 ...

  9. idea-----Intellij IDEA配置tomcat(非maven项目)

    Intellij IDEA配置tomcat(非maven项目) 引用: https://blog.csdn.net/springlovejava/article/details/78570241 ID ...

  10. 【JZOJ1259】牛棚安排

    description Farmer John的N(1<=N<=1000)头奶牛分别居住在农场所拥有的B(1<=B<=20)个牛棚的某一个里.有些奶牛很喜欢她们当前住的牛棚,而 ...