今天想做做图论,于是点开了这道题。。。。(是二分图染色然而我没看出来)

四种操作及条件:

  1. s1.push() 需满足 待push的元素小于栈顶 && {

    若在原序列中,待push元素的后面存在一个比 待push元素大 且比 s2.top() 大的元素,记为a ,那么显然在a被push以前,待push元素和s2.top(),一定会被pop()掉

    那么如果此时在a后,有一个比 待push元素 小的数,那么一定不能把这个待push的元素 push到 s1 中

  } 则ans[++cnt]='a'

  2.s1.pop() 需满足 s1.top()=应该pop()的元素 则ans[++cnt]='b'

  3.s2.push() 需满足 待push的元素小于栈顶 则ans[++cnt]='c'

  4.s2.pop() 需满足 s2.top()=应该pop()的元素 则ans[++cnt]='d'

否则,无解。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define R register int
#define getchar() *S++
#define pc(x) putchar(x)
using namespace std;
char RR[],*S=RR;
const int M=;
inline int g() {
R ret=; register char ch; while(!isdigit(ch=getchar())) ;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret;
}
int n,cnt,crt=,pos=;
int s1[M],tp1,s2[M],tp2,a[M];
char ans[M<<];
bool flg;
inline bool ck(int pos) {
if(!tp2) return true; R i;
for(i=pos+;i<=n;++i) if(a[i]>a[pos]&&a[i]>s2[tp2]) break;
for(R j=i+;j<=n;++j) if(a[j]<a[pos]) return false; return true;
}
signed main() {
//freopen("in.in","r",stdin);
fread(RR,sizeof(RR),,stdin);
n=g(); s2[]=s1[]=M<<; //cout<<n<<endl;
for(R i=;i<=n;++i) a[i]=g();//,cout<<a[i]<<endl;
for(R i=;i<=(n<<);++i) {
if(pos<=n&&a[pos]<s1[tp1]&&ck(pos)) {
s1[++tp1]=a[pos]; ans[i]='a',++pos;
} else if(s1[tp1]==crt) {
++crt,--tp1; ans[i]='b';
} else if(pos<=n&&a[pos]<s2[tp2]) {
s2[++tp2]=a[pos]; ans[i]='c',++pos;
} else if(s2[tp2]==crt) {
++crt,--tp2; ans[i]='d';
} else {flg=true; break;}
} if(flg) pc(''); else for(R i=;i<=(n<<);++i) pc(ans[i]),pc(' '); pc('\n');
}

Luogu P1155 双栈排序 图论?模拟吧。。的更多相关文章

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

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

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

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

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

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

  4. P1155 双栈排序

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

  5. 洛谷——P1155 双栈排序

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

  6. LOJ P1155 双栈排序 二分图染色 图论

    https://www.luogu.org/problem/show?pid=P1155 题解: https://www.byvoid.com/zhs/blog/noip2008-twostack 开 ...

  7. 洛谷P1155 双栈排序

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

  8. 【Luogu】P1155双栈排序(二分图)

    题目链接在此 此题一开始写了个深搜,过了30%的数据,也就是n<=10的那一段.... 然后看了题解发现这是个二分图的判断. 我们先举例子找到不能放进一个栈里的规律.设有数列[2,3,1,4] ...

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

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

随机推荐

  1. tkinter之button

    Button按钮,直接上代码: from tkinter import * def gs(): global read s=Label(read,text='昨夜西风凋敝树,堵上高楼,望尽天涯路!', ...

  2. BZOJ 1677 [Usaco2005 Jan]Sumsets 求和:dp 无限背包 / 递推【2的幂次方之和】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1677 题意: 给定n(n <= 10^6),将n分解为2的幂次方之和,问你有多少种方 ...

  3. leetcode 66. Plus One(高精度加法)

    Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...

  4. 如何在u盘上安装系统, (非安装盘)

    在u盘中永久安装Fedora. 需要两个u盘(live usb), 一个系统镜像文件. 方法是: 用一个u盘作安装盘,  然后通过这个u盘把系统安装到另一个u盘上. 两个U盘上的文件都会被覆盖. 1. ...

  5. 从结果推断过程----->使用System.out和Root Device

    刚才解决了一个App中更新的逻辑问题.出问题之后发现,有很多处调用了更新,后来都不知道是哪里改写了SharedPreferences. 然后一直在挨个寻找每一处更新的地方,花了很多时间. 最后直接使用 ...

  6. Web 攻击之 XSS 攻击及防御策略

    XSS 攻击 介绍 XSS 攻击,从最初 netscap 推出 javascript 时,就已经察觉到了危险. 我们常常需要面临跨域的解决方案,其实同源策略是保护我们的网站.糟糕的跨域会带来危险,虽然 ...

  7. java面试题06

    题目: 数据库 1. 表名:g_cardapply 字段(字段名/类型/长度): g_applyno varchar 8://申请单号(关键字) g_applydate bigint 8://申请日期 ...

  8. AtCoder Grand Contest 014 D:Black and White Tree

    题目传送门:https://agc014.contest.atcoder.jp/tasks/agc014_d 题目翻译 给你一棵树,每次任选一个点染色,先手染白色,后手染黑色.如果最后存在一个白色的点 ...

  9. Iptables防火墙面试题

    Iptables防火墙面试题 第1章 (一)基础口试题 1.1 详述 iptales 工作流程以及规则过滤顺序? 1.防火墙是一层层过滤的.实际是按照配置规则的顺序从上到下,从前到后进行过滤的. 2. ...

  10. 6 git 生成SSH公钥/私钥 查看公钥

    如果没有公钥的话就生成公钥私钥:  $ ssh-keygen 然后连续回车(一次是位置,两次密码)