题意

\(n(n \le 1000000)\)个物品,颜色分别为\(a[i]\),现在要求排在一排使得相邻两个砖块的颜色不同,且限定第一个砖块和最后一个砖块的颜色,输出一个合法解否则输出-1。

分析

贪心?反正我不会证明。

题解

从左到右扫,每次放一个数量最多且合法的砖块,如果数量相同,优先放末尾的。

#include <bits/stdc++.h>
using namespace std;
char Buf[15000000], *buf=Buf;
int getint() {
int x=0;
char c=*buf++;
for(; c<'0'||c>'9'; c=*buf++);
for(; c>='0'&&c<='9'; x=x*10+c-'0', c=*buf++);
return x;
}
typedef pair<int, int> pii;
#define mkpii(a, b) make_pair<int, int> (a, b)
const int N=1000005;
int c[N], n, st, ed, m, g=1;
priority_queue<pii> q;
int main() {
fread(Buf, 1, sizeof Buf, stdin);
n=getint(), st=getint(), ed=getint();
for(int i=1; i<=n; ++i) {
int x=getint();
m+=x;
x-=(int)(i==st)+(i==ed);
if(x>0) {
q.push(mkpii(x, i==ed?n+i:i));
}
if(x<0) {
g=0;
}
}
if(m==1) {
g=1;
}
c[1]=st==ed?n+st:st;
c[m]=n+ed;
for(int i=2; i<m; ++i) {
pii t=q.top();
q.pop();
if(c[i-1]==t.second && q.size()) {
pii t2=q.top();
q.pop();
q.push(t);
t=t2;
}
c[i]=t.second;
if(t.first-1) {
q.push(mkpii(t.first-1, t.second));
}
}
for(int i=1; i<m; ++i) {
if(c[i]==c[i+1]) {
g=0;
break;
}
}
if(!g) {
puts("0");
return 0;
}
for(int i=1; i<=m; ++i) {
int id=c[i];
printf("%d ", id>n?id-n:id);
}
return 0;
}

【BZOJ】3523: [Poi2014]Bricks的更多相关文章

  1. 【BZOJ】3524: [Poi2014]Couriers

    [算法]主席树 [题解]例题,记录和,数字出现超过一半就递归查找. 主席树见[算法]数据结构 #include<cstdio> #include<algorithm> #inc ...

  2. 【BZOJ】3835: [Poi2014]Supercomputer

    题意 \(n(1 \le 1000000)\)个点的有根树,\(1\)号点为根,\(q(1 \le 1000000)\)次询问,每次给一个\(k\),每一次可以选择\(k\)个未访问的点,且父亲是访问 ...

  3. 【BZOJ】3832: [Poi2014]Rally

    题意 \(n(2 \le n \le 500000)\)个点\(m(1 \le m \le 1000000)\)条边的有向无环图,找到一个点,使得删掉这个点后剩余图中的最长路径最短. 分析 神题不会做 ...

  4. 【BZOJ】3526: [Poi2014]Card

    题意 \(n(n \le 200000)\)张卡片,正反有两个数\(a[i], b[i]\).\(m(m \le 1000000)\)次操作,每次交换\(c[i].d[i]\)位置上的卡片.每一次操作 ...

  5. 【BZOJ】3521: [Poi2014]Salad Bar

    题意 长度为\(n(1 \le n \le 1000000)\)的\(01\)字符串.找一个最长的连续子串\(S\),使得不管是从左往右还是从右往左取,都保证每时每刻已取出的\(1\)的个数不小于\( ...

  6. 【BZOJ】3834: [Poi2014]Solar Panels

    http://www.lydsy.com/JudgeOnline/problem.php?id=3834 题意:求$max\{(i,j)\}, smin<=i<=smax, wmin< ...

  7. 【BZOJ】3524 [POI2014] Couriers(主席树)

    题目 传送门:QWQ 传送到洛谷QWQ 分析 把求区间第k大的改一改就ok了. 代码 #include <bits/stdc++.h> using namespace std; ; ], ...

  8. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  9. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

随机推荐

  1. [Unity3d]调试问题之UI/Image不显示

    问题描述 在项目中添加的UI/Image资源,在PC和通过Unity Remove测试都没有问题: PC上的效果 手机上Unity Remove测试结果 可真正发布到手机上运行则如下显示,说明imag ...

  2. Python之路【第一篇】:Python简介和入门

    python简介: 一.什么是python Python(英国发音:/ pa θ n/ 美国发音:/ pa θɑ n/),是一种面向对象.直译式的计算机程序语言. 每一门语言都有自己的哲学: pyth ...

  3. MVC验证session是否过期,在每个action执行之前验证

            protected override void OnActionExecuting(ActionExecutingContext filterContext)         {   ...

  4. 【Go入门教程6】interface(interface类型、interface值、空interface{}、嵌入interface、反射)

    interface Go语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便,当你看完这一章,你就会被interface的巧妙设计所折服. 什么是interface 简单 ...

  5. synchronized在jvm底层是如何实现的

    目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea.本文并不比较synchronized与Loc ...

  6. 如果asp.net mvc中某个action被执行了两次,请检查是不是以下的原因

    注释 <link rel="icon" href="#"> 这一句后试试

  7. 听说awk语言也可以编写脚本

    导读 从 awk 系列开始,我们都是在命令行或者脚本文件里写一些简短的 awk 命令和程序.然而 awk 和 shell 一样也是一个解释型语言.通过从开始到现在的一系列的学习,你现在能写可以执行的 ...

  8. Codeforces 696 D. Legen...

    Description 每个字符串有些价值,问生成长度为 \(l\) 的字符串最多能获得多少价值,总字符数不超过 \(200\), \(l\leqslant 10^{14}\) . Sol AC自动机 ...

  9. time和datetime时间戳---python

    time模块 time模块提供各种操作时间的函数 说明:一般有两种表示时间的方式:        1.时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的 2.以数 ...

  10. HTML5安全:CORS(跨域资源共享)简介。。。ie67不要想了。。。

    来源:http://blog.csdn.net/hfahe/article/details/7730944 前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Go ...