题意

题目链接

Sol

首先不难想到一种贪心策略:能弹则弹,优先放A

然后xjb写了写发现只有\(40\),原因是存在需要决策的情况

比如

\(A = {10}\)

\(B = {8}\)

现在进来一个\(7\),看上去很难判断\(7\)到底放在哪里,如果放\(A\),后面来个\(9\),再来个\(6\),我们就凉了。

但是如果先来的是\(6\),且此时已经排完了\(1-5\),那么我们可以在后续操作中把\(7\)弄走

仔细想想不难发现,\(7\)不能放在\(A\)中,当且仅当存在一个位置\(K\),满足\(a[k]>7\),且在\(k\)之后有位置\(l\),满足\(a[l]<7\)

也就是说\(i, j, k\)不能同时在栈中,当且仅当

\(i < j < k\)且\(a[k] < a[i] < a[j]\)

然后就做完了,xjb贪即可

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define NO {puts("0"); exit(0);}
#define pb(x) push_back(x)
using namespace std;
const int MAXN = 1001;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, a[MAXN], s1[MAXN], tp1, s2[MAXN], tp2;
vector<char> v;
bool check(int pos) {
if(!tp1) return 1;
int i, j;
if(a[pos] > s1[tp1]) return 0;
if(!tp2) return 1;
for(i = pos + 1; i <= N; i++) if(a[i] > a[pos] && a[i] > s2[tp2]) break;
for(int j = i + 1; j <= N; j++) if(a[j] < a[pos]) return 0;
return 1;
}
int main() {
N = read();
for(int i = 1; i <= N; i++) a[i] = read();
int now = 1;
for(int i = 1; i <= N + 1; i++) {
if(a[i] == now) {now++; v.pb('a'); v.pb('b'); continue;}
while(now == s1[tp1] || now == s2[tp2]) {
if(now == s1[tp1]) v.pb('b'), tp1--, now++;
if(now == s2[tp2]) v.pb('d'), tp2--, now++;
}
if(i == N + 1) break;
if(check(i)) {v.pb('a'); s1[++tp1] = a[i]; continue;}
if(!tp2 || a[i] < s2[tp2]) {v.pb('c'); s2[++tp2] = a[i]; continue;}
NO;
}
if(tp1 || tp2) NO;
for(int i = 0; i < v.size(); i++) putchar(v[i]), putchar(' ');
return 0;
}

洛谷P1155 双栈排序(贪心)的更多相关文章

  1. 洛谷$P1155$ 双栈排序 贪心+二分图匹配

    正解:贪心+二分图匹配 解题报告: 传送门$QwQ$ 跪了,,,我本来以为我$NOIp$做得差不多了,,,然后康了一眼发现没做多少啊其实$QAQ$ 然后来康题趴$QwQ$ 首先考虑如果只有一个栈的情况 ...

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

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

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

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

  4. 洛谷——P1155 双栈排序

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

  5. 洛谷P1155 双栈排序

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

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

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

  7. 洛谷 P1155 双栈排序

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

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

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

  9. vijos 1605 双栈排序 - 贪心 - 二分图

    题目传送门 传送门I 传送门II 题目大意 双栈排序,问最小字典序操作序列. 不能发现两个数$a_{j}, a_{k}\ \ (j < k)$不能放在同一个栈的充分必要条件时存在一个$i$使得$ ...

随机推荐

  1. SecureCRT上传下载文件

    这篇内容在哪看到的我也找不到了,不过就是做个记录. 步骤如下: 1.SecureCRT连接远程终端. 2.在连接窗口上方右击,弹出菜单后点击Connect SFTP Session, 3.点击后弹出窗 ...

  2. leetcode-771-Jewels and Stones(建立哈希表,降低时间复杂度)

    题目描述: You're given strings J representing the types of stones that are jewels, and S representing th ...

  3. Bootrap 项目实战(微金所前端首页)第一部分

    微金所前端首页成果图:(这是本人自己按照微金所官网首页,采用Bootrap,JS,JQuery,css制作的网页效果图,在第二部分我会公布网页源代码) 如需网页源代码,请在下方留言,备注你的qq邮箱. ...

  4. 主流服务器虚拟化技术简单使用——KVM(二)

    通过Linux工具管理KVM 主流服务器虚拟化技术简单使用——KVM(一)部署了一台KVM主机,提到KVM可以通过命令行工具(virt-install.virsh)和GUI工具(virt-manage ...

  5. Django get_object ,get_queryset方法

    Django提供了很多通用的基于类的视图(Class Based View),可以帮我们简化执行以下操作的代码.这些基于类的视图还提供了get_queryset, get_context_data和g ...

  6. Shiro入门资源整理

    学习一个框架,查阅权威有效的资料能够事半功倍,本文收集笔者学习此框架中帮助很大的文档,希望对大家有所帮助. 对于文档类的,强烈建议看官方文档,而不是百度出来的经过网友加工或者搬运过来的资料!! shi ...

  7. 使用python requests库写接口自动化测试--记录学习过程中遇到的坑(1)

    一直听说python requests库对于接口自动化测试特别合适,但由于自身代码基础薄弱,一直没有实践: 这次赶上公司项目需要,同事小伙伴们一起学习写接口自动化脚本,听起来特别给力,赶紧实践一把: ...

  8. int和double究竟占多少个字节?c++等

    最近在看深入理解计算机系统这本书,上面提到了在32位机器和64机器中int类型都占用4个字节.后来,查了The C Programming language这本书,里面有一句话是这样的:Each co ...

  9. linux下获取系统时间 和 时间偏移

    获取linux时间  并计算时间偏移 void getSystemTimer(void){#if 0 char *wdate[]={"Sun","Mon",&q ...

  10. C#编写运行在Linux环境下的采用Mediainfo来获取多媒体文件信息的代码

    项目开始设计的是运行在windows下,所以一开始采用的是windows服务模式来获取多媒体文件信息,后来要求调整为可以在Linux下运行,经过这两天的资料查找,实现了Linux下通过.NET来获取多 ...