双栈排序

思路:

  二分图染+模拟;

代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define maxn 1005
  4. #define maxm 2000005
  5. int n,head[maxn],E[maxm],V[maxm],cnt,col[maxn];
  6. int minn[maxn],ai[maxn],sta1[maxn],sta2[maxn],top1,top2;
  7. bool if_[maxn][maxn];
  8. inline void in(int &now)
  9. {
  10. char Cget=getchar();now=;
  11. while(Cget>''||Cget<'')Cget=getchar();
  12. while(Cget>=''&&Cget<='')
  13. {
  14. now=now*+Cget-'';
  15. Cget=getchar();
  16. }
  17. }
  18. void edge_add(int u,int v)
  19. {
  20. E[++cnt]=head[u],V[cnt]=v,head[u]=cnt;
  21. E[++cnt]=head[v],V[cnt]=u,head[v]=cnt;
  22. }
  23. bool dfs(int now,int dis,int fa)
  24. {
  25. if(col[now]) return true;
  26. col[now]=dis+;
  27. for(int i=head[now];i;i=E[i])
  28. {
  29. if(V[i]==fa) continue;
  30. if(dfs(V[i],dis^,now)) return true;
  31. }
  32. return false;
  33. }
  34. int main()
  35. {
  36. in(n);
  37. for(int i=;i<=n;i++) in(ai[i]);
  38. minn[n]=ai[n];
  39. for(int i=n-;i>=;i--) minn[i]=min(minn[i+],ai[i]);
  40. for(int i=;i<n;i++)
  41. {
  42. for(int j=i+;j<n;j++)
  43. {
  44. if(minn[j+]<ai[i]&&ai[i]<ai[j])
  45. {
  46. if(!if_[i][j])
  47. {
  48. if_[i][j]=true;
  49. if_[j][i]=true;
  50. edge_add(i,j);
  51. }
  52. }
  53. }
  54. }
  55. for(int i=;i<=n;i++)
  56. {
  57. if(!col[i])
  58. {
  59. if(dfs(i,,))
  60. {
  61. printf("");
  62. return ;
  63. }
  64. }
  65. }
  66. int now=;
  67. for(int i=;i<=n;i++)
  68. {
  69. if(ai[i]>now)
  70. {
  71. if(col[i]==) putchar('a'),sta1[++top1]=ai[i];
  72. else putchar('c'),sta2[++top2]=ai[i];
  73. }
  74. else
  75. {
  76. now++;
  77. if(col[i]==) printf("a b");
  78. else printf("c d");
  79. while()
  80. {
  81. if(sta1[top1]==now)
  82. {
  83. printf(" b"),top1--;
  84. now++;continue;
  85. }
  86. if(sta2[top2]==now)
  87. {
  88. printf(" d"),top2--;
  89. now++;continue;
  90. }
  91. break;
  92. }
  93. }
  94. if(i!=n) putchar(' ');
  95. }
  96. while(top1--) printf(" b");
  97. while(top2--) printf(" d");
  98. return ;
  99. }

AC日记——双栈排序 洛谷 P1155的更多相关文章

  1. AC日记——[SDOI2015]星际战争 洛谷 P3324

    题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...

  2. AC日记——联合权值 洛谷 P1351

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  3. AC日记——I Hate It 洛谷 P1531

    题目背景 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 题目描述 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的 ...

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

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

  5. AC日记——[CQOI2009]DANCE跳舞 洛谷 P3153

    [CQOI2009]DANCE跳舞 思路: 二分+最大流: 代码: #include <cstdio> #include <cstring> #include <iost ...

  6. AC日记——松江1843路 洛谷七月月赛

    松江1843路 思路: 三分: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 #define ...

  7. AC日记——严酷的训练 洛谷 P2430

    严酷的训练 思路: 背包: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 5005 int n,m,bi[m ...

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

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

  9. AC日记——小魔女帕琪 洛谷 P3802

    小魔女帕琪 思路: 概率公式计算: 代码: #include <bits/stdc++.h> using namespace std; ],sig; int main() { ;i< ...

随机推荐

  1. Codeforces Round #546 (Div. 2) 题解

    Codeforces Round #546 (Div. 2) 题目链接:https://codeforces.com/contest/1136 A. Nastya Is Reading a Book ...

  2. ubuntu server安装kvm

    参考资料: 1. https://help.ubuntu.com/community/KVM 2.http://wiki.ubuntu.org.cn/Kvm%E6%95%99%E7%A8%8B 3.h ...

  3. lightoj 1245

    lightoj 1245 Harmonic Number (II) 题意:给定一个 n ,求 n/1 + n/2 + …… + n/n 的值(这里的 "/" 是计算机的整数除法,向 ...

  4. ZooKeeper概述(三)

    ZooKeeper:分布式应用的分布协调服务 ZooKeeper是一个为分布式应用提供的分布的开源的协调服务.它暴露一组简单的原子操作,分布式系统可以在这之上为同步,配置管理,和组和命名实现更高级的服 ...

  5. vijos 1069 新年趣事之红包 Prim水题

    描述 xiaomengxian一进门,发现外公.外婆.叔叔.阿姨……都坐在客厅里等着他呢.经过仔细观察,xiaomengxian发现他们所有人正好组成了一个凸多边形.最重要的是,他们每个人手里都拿着一 ...

  6. python模拟android屏幕高频点击工具

    一.环境 windows 10  + python3.6 二.需求 1.模拟android设备高频点击事件: 2.模拟规定次数的点击事件或模拟规定时间内的点击事件: 三.code 1.模拟规定时间内的 ...

  7. Bzoj4870 [SXOI2017]组合数问题

    Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 155  Solved: 78 Description Input 第一行有四个整数 n, p, k, ...

  8. 【HNOI】五彩斑斓 模拟

    [题目描述] 给定一个n*m的矩阵,矩阵的某些位置有一个颜色(可以没有颜色,即为0),现在你可以将矩阵的某一行或者某一列染成同一种颜色,问最少用多少步能达到目标矩阵的染色方案,输出最少步数和方案. [ ...

  9. AndroidStudio创建jinLibs文件夹

    在文件中的buildTypes节点下添加 sourceSets.main {          jniLibs.srcDir 'libs'      } 如图

  10. Java中volatile修饰符,不稳定标记的用法笔记

    今天学java特性时,发现了volatile修饰符,这个修饰符修饰的变量告诉java编译器忽略优化机制,这样的优势是: java优化后,寄存器会缓存内存里的变量,另一个线程修改这个变量的内存时,不会同 ...