这题什么毒瘤......之前看一直没思路,然后心说写个暴搜看能有多少分,然后就A了??!

题意:给你一个n排列,求它们能不能通过双栈来完成排序。如果能输出最小字典序方案。

[update]这里面加了一个错误的剪枝。这是个假算法。

解:首先我们发现有一个策略,就是可以出栈的时候出栈,否则就在两个栈中选栈顶大于它且栈顶尽量小的那个入栈。如果这样还GG就无解。

但是这样不能保证字典序最小。因为入栈栈顶较小的可以保证决策包容性,但是可能你入另一个栈不会引起冲突。

于是想到搜索,T飞。

加上剪枝:如果先入的栈顶较小,那么不用入另一个栈。AC。

然后发现过不了hack数据:

    

这组数据在最后要先入栈5,再出栈4。

稍微调整一下搜索顺序就行了。AC。

 #include <cstdio>
#include <algorithm> const int N = , INF = 0x3f3f3f3f; int a[N], b[N], c[N], d[N], ta, tb, tc, td, p[N << ], tp, n; void DFS(int k) {
/*
printf("k = %d tb = %d tc = %d td = %d \n", k, tb, tc, td);
printf("b: ");
for(int i = 1; i <= tb; i++) {
printf("%d ", b[i]);
}
printf("\nc: ");
for(int i = 1; i <= tc; i++) {
printf("%d ", c[i]);
}
printf("\ned: ");
printf("%d \n", td); */ if(td == n) {
//
for(int i = ; i <= tp; i++) {
putchar(p[i] + 'a' - );
if(i < tp) {
putchar(' ');
}
}
exit();
return;
}
if(a[k] == d[td] + ) {
d[++td] = a[k];
p[++tp] = ;
p[++tp] = ;
DFS(k + );
td--;
tp--;
tp--;
return;
} if(a[k] < b[tb] && k <= n) {
b[++tb] = a[k];
p[++tp] = ;
DFS(k + );
tp--;
tb--;
if(b[tb] < c[tc]) {
return;
}
} if(b[tb] == d[td] + ) {
d[++td] = b[tb];
tb--;
p[++tp] = ;
DFS(k);
tp--;
b[++tb] = d[td];
td--;
return;
} if(a[k] < c[tc] && k <= n) {
c[++tc] = a[k];
p[++tp] = ;
DFS(k + );
tp--;
tc--;
return;
}
if(c[tc] == d[td] + ) {
d[++td] = c[tc];
tc--;
p[++tp] = ;
DFS(k);
tp--;
c[++tc] = d[td];
td--;
return;
} return;
} int main() {
scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%d", &a[i]);
} b[] = INF;
c[] = INF + ; DFS(); printf("");
return ;
}
/**
10
10 2 8 1 7 9 3 4 5 6 a a c a b b c a a b a b a b a b d d b b */

AC代码

洛谷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 双栈排序(贪心)

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

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

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

  6. 洛谷 P1155 双栈排序

    题面 解题思路 这道题乍一看还以为是个模拟..怒写一发30分(noip提高组t4有模拟吗?). 其实很好hack,如 10 10 2 8 1 7 9 3 4 5 6 按模拟的思路,应该是10入第一个栈 ...

  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. 20155223 Exp3 免杀原理与实践 实验报告

    20155223 Exp3 免杀原理与实践 实验报告 实验前准备 安装Veil-Evasion 直接使用Kali快速安装命令,拒绝采用git安装命令 apt-get -y install veil-e ...

  2. 20155311《网络对抗》Web基础

    20155311<网络对抗>Web基础 实验过程 Web前端:HTML 使用netstat -aptn查看80端口是否被占用(上次实验设置为Apache使用80端口),如果被占用了就kil ...

  3. 定制 input[type="radio"] 和 input[type="checkbox"] 样式

    表单中,经常会使用到单选按钮和复选框,但是,input[type="radio"] 和 input[type="checkbox"] 的默认样式在不同的浏览器或 ...

  4. [CF983D]Arkady and Rectangles[线段树+可删堆/set]

    题意 你有一个无限大的绘图板,开始颜色是\(0\) , 你将进行\(n\) 次绘图,第\(i\) 次绘图会将左下角为 \((x_1, y_1)\),右上角为\((x_2, y_2)\) 的矩形涂成颜色 ...

  5. 关于web.xml3.0启动报错

    九月 08, 2017 10:18:19 上午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRu ...

  6. SpringBoot入门学习记录(一)

    最近,SpringBoot.SpringCloud.Dubbo等框架非常流行,作为Coder里的一名小学生,借着改革开放的东风,自然也是需要学习学习的,于是将学习经历记录于此,以备日后查看. 官网:h ...

  7. OD之修改文件标题(一)

    OD是逆向工程中的一个重要工具,逆向工程调试说明具体请参考:百度百科,OD介绍,当然就我了解而言,俗话就是破解软件,市面上的什么破解版,精简版啥的基本都是通过这种技术的,但是这并不能一概而论说逆向工程 ...

  8. 4星|《流量池》:Luckin Coffee营销操盘手经验谈

    流量池:“急功近利”的流量布局.营销转化 作者是一线营销操盘手,全书是作者的经验总结,这样的作者在营销类图书中比较罕见,因此这本书非常有价值. 全书是写给巨头之外的企业营销人员看的,这样的企业的流量来 ...

  9. 微软职位内部推荐-Principal Software Eng Mgr

    微软近期Open的职位: Job Title: &nbsp Principal Software Eng Mgr Work Location: Shanghai, China Job Desc ...

  10. Beta阶段对团队成员公开感谢

    我感谢付佳对我的帮助,因为Beta阶段她承担了一名组长责任,每次代码编写,安排任务都由她带头来做,并且在代码方面帮助我解决了一些问题.