洛谷P1155 双栈排序——思路题
题目:https://www.luogu.org/problemnew/show/P1155
思路...
看博客:https://www.cnblogs.com/Narh/p/9213825.html
二分图什么的,字典序什么的,考场上怎么想出来...
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=;
int n,a[maxn],f[maxn],col[maxn],head[maxn],ct,pos[maxn];
bool flag;
struct N{
int to,next;
N(int t=,int n=):to(t),next(n) {}
}edge[maxn*maxn];
void add(int x,int y){edge[++ct]=N(y,head[x]); head[x]=ct;}
bool init()
{
f[n]=n+;//!
for(int i=n-;i;i--)
{
f[i]=min(a[i+],f[i+]);
for(int j=i+;j<=n;j++)
if(a[j]>a[i]&&f[j]<a[i])add(i,j),add(j,i);
}
return ;
}
void dfs(int x)
{
for(int i=head[x];i;i=edge[i].next)
{
int u=edge[i].to;
if(col[u]==col[x]){flag=; return;}
else if(!col[u])col[u]=(col[x]^),dfs(u);
if(flag)return;
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
init();
for(int i=;i<=n;i++)
if(!col[i])
{
col[i]=;
dfs(i);
if(flag){printf("0\n"); return ;}
}
int nw=;
for(int i=;i<=n;i++)
{
pos[a[i]]=col[i];
if(col[i]==)printf("a ");
else printf("c ");
while(pos[nw])
{
if(pos[nw]==)printf("b ");
else printf("d ");
nw++;
}
}
return ;
}
洛谷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 双栈排序
这题什么毒瘤......之前看一直没思路,然后心说写个暴搜看能有多少分,然后就A了??! 题意:给你一个n排列,求它们能不能通过双栈来完成排序.如果能输出最小字典序方案. [update]这里面加了一 ...
- 洛谷 P1155 双栈排序
题面 解题思路 这道题乍一看还以为是个模拟..怒写一发30分(noip提高组t4有模拟吗?). 其实很好hack,如 10 10 2 8 1 7 9 3 4 5 6 按模拟的思路,应该是10入第一个栈 ...
- 洛谷$P1155$ 双栈排序 贪心+二分图匹配
正解:贪心+二分图匹配 解题报告: 传送门$QwQ$ 跪了,,,我本来以为我$NOIp$做得差不多了,,,然后康了一眼发现没做多少啊其实$QAQ$ 然后来康题趴$QwQ$ 首先考虑如果只有一个栈的情况 ...
- 洛谷P1155 双栈排序(贪心)
题意 题目链接 Sol 首先不难想到一种贪心策略:能弹则弹,优先放A 然后xjb写了写发现只有\(40\),原因是存在需要决策的情况 比如 \(A = {10}\) \(B = {8}\) 现在进来一 ...
- P1155 双栈排序(二分图染色)
P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一 ...
- P1155 双栈排序
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作aaa 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果 ...
随机推荐
- 集训第六周 古典概型 期望 C题
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=30728 一个立体方块,每个单位方块都是关闭状态,每次任两个点,以这两点为对角 ...
- Uva 4916 Selling Cells(随机算法)
题意: 给定n个圆的 坐标 和半径, 求第一个圆与其他圆相交的面积占第一个圆的面积的多大. 分析: 如果从局部去想, 处理每个圆之间的关系, 求出他们与第一个圆的交集, 这样可能就会十分复杂了. 不妨 ...
- 九度oj 题目1070:今年的第几天?
题目1070:今年的第几天? 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6832 解决:3779 题目描述: 输入年.月.日,计算该天是本年的第几天. 输入: 包括三个整数年(1< ...
- poj1984并查集的相对偏移
#include<stdio.h>//典型题 #include<math.h> #define N 40010 struct node { int x,y,z; }pre[N] ...
- codeforces 362B
#include<stdio.h> #include<stdlib.h> int cmp(const void *a,const void *b) { return *(int ...
- 确定位置的经纬度LocationUtil
package com.pingyijinren.test; import android.content.Context; import android.location.Location; imp ...
- Swap Nodes in Pairs(链表操作)
Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...
- java文件工具类
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- laravel email markdown
laravel 邮件使用markdown php artisan make:mail lessonPublished --markdown="emails.published" 这 ...
- java编程思想-复用类(2)
如果java的基类拥有某个已被多次重载的方法名称,那么在导出类中重新定义该方法名称并不会屏蔽其在基类中的任何版本(这一点与C++不同) class Homer { char doh(char c) { ...