洛谷P1155 双栈排序
这题什么毒瘤......之前看一直没思路,然后心说写个暴搜看能有多少分,然后就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 双栈排序的更多相关文章
- 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...
- [NOIP2008] 提高组 洛谷P1155 双栈排序
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...
- 洛谷——P1155 双栈排序
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...
- 洛谷P1155 双栈排序(贪心)
题意 题目链接 Sol 首先不难想到一种贪心策略:能弹则弹,优先放A 然后xjb写了写发现只有\(40\),原因是存在需要决策的情况 比如 \(A = {10}\) \(B = {8}\) 现在进来一 ...
- 洛谷P1155 双栈排序——思路题
题目:https://www.luogu.org/problemnew/show/P1155 思路... 看博客:https://www.cnblogs.com/Narh/p/9213825.html ...
- 洛谷 P1155 双栈排序
题面 解题思路 这道题乍一看还以为是个模拟..怒写一发30分(noip提高组t4有模拟吗?). 其实很好hack,如 10 10 2 8 1 7 9 3 4 5 6 按模拟的思路,应该是10入第一个栈 ...
- 洛谷$P1155$ 双栈排序 贪心+二分图匹配
正解:贪心+二分图匹配 解题报告: 传送门$QwQ$ 跪了,,,我本来以为我$NOIp$做得差不多了,,,然后康了一眼发现没做多少啊其实$QAQ$ 然后来康题趴$QwQ$ 首先考虑如果只有一个栈的情况 ...
- P1155 双栈排序(二分图染色)
P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一 ...
- P1155 双栈排序
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作aaa 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果 ...
随机推荐
- 20155223 Exp3 免杀原理与实践 实验报告
20155223 Exp3 免杀原理与实践 实验报告 实验前准备 安装Veil-Evasion 直接使用Kali快速安装命令,拒绝采用git安装命令 apt-get -y install veil-e ...
- 20155311《网络对抗》Web基础
20155311<网络对抗>Web基础 实验过程 Web前端:HTML 使用netstat -aptn查看80端口是否被占用(上次实验设置为Apache使用80端口),如果被占用了就kil ...
- 定制 input[type="radio"] 和 input[type="checkbox"] 样式
表单中,经常会使用到单选按钮和复选框,但是,input[type="radio"] 和 input[type="checkbox"] 的默认样式在不同的浏览器或 ...
- [CF983D]Arkady and Rectangles[线段树+可删堆/set]
题意 你有一个无限大的绘图板,开始颜色是\(0\) , 你将进行\(n\) 次绘图,第\(i\) 次绘图会将左下角为 \((x_1, y_1)\),右上角为\((x_2, y_2)\) 的矩形涂成颜色 ...
- 关于web.xml3.0启动报错
九月 08, 2017 10:18:19 上午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRu ...
- SpringBoot入门学习记录(一)
最近,SpringBoot.SpringCloud.Dubbo等框架非常流行,作为Coder里的一名小学生,借着改革开放的东风,自然也是需要学习学习的,于是将学习经历记录于此,以备日后查看. 官网:h ...
- OD之修改文件标题(一)
OD是逆向工程中的一个重要工具,逆向工程调试说明具体请参考:百度百科,OD介绍,当然就我了解而言,俗话就是破解软件,市面上的什么破解版,精简版啥的基本都是通过这种技术的,但是这并不能一概而论说逆向工程 ...
- 4星|《流量池》:Luckin Coffee营销操盘手经验谈
流量池:“急功近利”的流量布局.营销转化 作者是一线营销操盘手,全书是作者的经验总结,这样的作者在营销类图书中比较罕见,因此这本书非常有价值. 全书是写给巨头之外的企业营销人员看的,这样的企业的流量来 ...
- 微软职位内部推荐-Principal Software Eng Mgr
微软近期Open的职位: Job Title:   Principal Software Eng Mgr Work Location: Shanghai, China Job Desc ...
- Beta阶段对团队成员公开感谢
我感谢付佳对我的帮助,因为Beta阶段她承担了一名组长责任,每次代码编写,安排任务都由她带头来做,并且在代码方面帮助我解决了一些问题.