题目链接

题解

这题有点神啊。。

我们仔细观察一下,发现两个栈内元素必须为降序

那么有结论 如果有\(i < j < k\) 且 \(a[k] < a[i] < a[j]\)则\(i\)和\(j\)不能存在于同一个栈

证明:

因为栈内元素必须降序,

那么加入\(a[j]\)时一定弹出了\(a[i]\),而又因为从小到大排序,

所以\(a[k]\)应该在\(a[i]\)前弹出,故结论正确。

证毕!

因为是两个栈

那么我们可以搞一个二分图染色

最后贪心模拟一遍

Code

#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
int a[N], s1[N], s2[N], Min[N], t1, t2, ans[N<<1], len, n;
bool G[N][N], vis[N];
int z[N];
void dfs(int x, int c) {
vis[x] = 1; z[x] = c;
for (int i = 1; i <= n; i++) {
if (!G[x][i]) continue;
if (!vis[i])
dfs(i, c^1);
else if (c == z[i]) {
printf("0\n");
exit(0);
}
}
return ;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
Min[n+1] = 2147483647;
for (int i = n; i >= 1; i--)
Min[i] = min(Min[i+1], a[i]);
for (int i = 1; i < n; i++)
for (int j = i+1; j <= n; j++)
if (Min[j+1] < a[i] && a[i] < a[j])
G[i][j] = G[j][i] = 1;
for (int i = 1; i <= n; i++)
if (!vis[i])
dfs(i, 0);
int now = 1;
for (int i = 1; i <= n; i++) {
if (!z[i]) {
while (s1[t1] == now) {
now++;
t1--;
ans[++len] = 1;
}
s1[++t1] = a[i];
len++;
}
else {
while (s1[t1] == now) {
now++;
t1--;
ans[++len] = 1;
}
while (s2[t2] == now) {
now++;
t2--;
ans[++len] = 3;
}
s2[++t2] = a[i];
ans[++len] = 2;
}
}
while (now <= n) {
if (s1[t1] == now) ans[++len] = 1, t1--;
else ans[++len] = 3, t2--;
now++;
}
for (int i = 1; i <= len; i++) printf("%c ", ans[i]+'a');
return 0;
}

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

  1. 洛谷 1155 (NOIp2008)双栈排序——仔细分析不合法的条件

    题目:https://www.luogu.org/problemnew/show/P1155 这道题教会我们要多思考. 好好分析过后发现同一个栈里不能有升序.就用它写了一个30分. #include& ...

  2. Luogu1155 NOIP2008 双栈排序 【二分图染色】【模拟】

    Luogu1155 NOIP2008 双栈排序 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过 2个栈 S1 和 S2 ,Tom希望借助以下 44 种操作实现将输入序列升序排序. 操作 ...

  3. NOIP2008双栈排序[二分图染色|栈|DP]

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

  4. noip2008 双栈排序

    题目描述 Description \(Tom\)最近在研究一个有趣的排序问题.如图所示,通过\(2\)个栈\(S_1\)和\(S_2\),\(Tom\)希望借助以下\(4\)种操作实现将输入序列升序排 ...

  5. Noip2008双栈排序

    [问题描述] 用两个栈使一个1...n的排列变得有序.一共有四个操作: A.stack1.push() 读入一个放入栈一 B.stack1.pop() 弹出栈一放入输出序列 C.stack2.push ...

  6. NOIP2008双栈排序(贪心)

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

  7. [题解] [NOIP2008] 双栈排序——关系的冲突至图论解法

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

  8. [NOIP2008]双栈排序 【二分图 + 模拟】

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

  9. [luogu1155 NOIP2008] 双栈排序 (二分图染色)

    传送门 Description Input 第一行是一个整数 n . 第二行有 n 个用空格隔开的正整数,构成一个 1−n 的排列. Output 共一行,如果输入的排列不是"可双栈排序排列 ...

  10. $[NOIp2008]$双栈排序 栈/二分图/贪心

    \(Sol\) 先考虑单栈排序,怎么样的序列可以单栈排序呢?设\(a_i\)表示位置\(i\)是哪个数.\(\exist i<j<k\),都没有\(a_k<a_i<a_j\), ...

随机推荐

  1. nginx配置跨域访问

    前端要在本地测试ajax接口,无法跨域访问,所以在测试环境的nginx配置了跨域支持,方法如下: 在nginx.conf文件, http块下配置 42 #support cross domain ac ...

  2. Docker学习笔记_安装和使用nginx

    一.软件环境 1.宿主机OS:Win10 64位 2.虚拟机OS:Ubuntu 18.04,虚拟机IP:192.168.8.25 3.Docker安装在虚拟机Ubuntu 18.04上 二.安装过程 ...

  3. 我搭建大数据Hadoop完全分布式环境遇到的坑---hadoop: command not found

    搭建大数据hadoop环境,遇到很多问题,这里记录一部分,以备以后查看. [遇到问题].在安装配置完hadoop以后,需要格式化namenode,输入指令:hadoop namenode -forma ...

  4. MySQL中having与where

    having与where区别: where中不可以用聚合函数(条件字段是未分组中的字段),having中可以用聚合函(条件字段是分组后字段).不过这里也很好理解,SQL语句在执行是先执行select ...

  5. Asp.net MVC获取访问系统的客户端计算机的主机名和IP地址

    string HostName = string.Empty; string ip = string.Empty; string ipv4 = String.Empty; if (!string.Is ...

  6. Monkey进行压力测试定位问题分析

    Monkey测试的log分析,我们可以通过几个关键词来判断测试是否通过.   分析log方法一(粗糙一点): 1)Monkey finished打开LOG,查看log的最下端,是否有类似以下字段:## ...

  7. 人脸识别 人工智能(AI)

    .. 如何通过AI实现 用我自己的数据集:能识别几张人脸.能否判断相似度.能否认出.

  8. Java主线程如何等待子线程执行结束(转)

    工作中往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线 ...

  9. Dijstra算法-------为了纪念,等以后看的时候方便

    杭电problem2066 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  10. wpf附加属性理解

    WPF附加属性 http://www.cnblogs.com/tianyou/archive/2012/12/27/2835670.html WPF属性(二)附加属性 http://blog.csdn ...