前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >洛谷P1155 双栈排序(贪心)

洛谷P1155 双栈排序(贪心)

作者头像
attack
发布2018-12-04 11:11:41
4250
发布2018-12-04 11:11:41
举报
文章被收录于专栏:数据结构与算法

题意

题目链接

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贪即可

代码语言:javascript
复制
// 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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • Sol
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档