洛谷P1878 舞蹈课
贪心 堆

 1 #include <bits/stdc++.h>
 2 #define LL long long
 3 #define GG int
 4 #define For(i, j, k) for(register int i=j; i<=k; i++)
 5 #define Dow(i, j, k) for(register int i=j; i>=k; i--)
 6 using namespace std;
 7 inline GG read() {
 8     GG x = 0, f = 1;
 9     char ch = getchar();
10     while(ch<'0'||ch>'9') { if(ch=='-') f = -1; ch = getchar(); }
11     while(ch>='0'&&ch<='9') { x = x*10+ch-48; ch = getchar(); }
12     return x * f;
13 }
14 void write(GG x) {
15     if(x<0) putchar('-'), x = -x;
16     if(x>9) write(x/10);
17     putchar(x%10+48);
18 }
19 inline void writeln(GG x) { write(x); putchar('\n'); }
20
21 const int N = 2e5+11;
22 struct node{
23     int l, r, del;
24     friend bool operator <(node a, node b) {
25         if(a.del != b.del) return a.del > b.del;
26         return a.l > b.l;
27     }
28 };
29 priority_queue <node> Q;
30 int n, tot;
31 int val[N], vis[N], L[N], R[N];
32 char s[N];
33
34 inline void work() {
35     while(!Q.empty()) {
36         node p = Q.top(); Q.pop();
37         if(vis[p.l] || vis[p.r]) continue;
38         vis[p.l] = 1; vis[p.r] = 1;
39         L[++tot] = p.l; R[tot] = p.r;
40
41         int l = p.l-1, r = p.r+1;
42         while(l>=1 && vis[l]) --l;
43         while(r<=n && vis[r]) ++r;
44         if(l>=1 && r<=n && s[l]!=s[r])
45             Q.push((node){l, r, abs(val[l]-val[r]) });
46     }
47 }
48
49 int main() {
50     n = read();
51     scanf("%s", s+1);
52     For(i, 1, n) val[i] = read();
53     For(i, 1, n-1)
54         if(s[i] != s[i+1])
55             Q.push((node){i, i+1, abs(val[i]-val[i+1])} );
56     work();
57     writeln(tot);
58     For(i, 1, tot) {
59         write(L[i]); putchar(' '); writeln(R[i]);
60     }
61 }

转载于:https://www.cnblogs.com/third2333/p/8476276.html

洛谷P1878 舞蹈课 贪心 堆相关推荐

  1. 洛谷 P1878 舞蹈课 —— 小顶堆

    This way 题意: 有 n个人参加一个舞蹈课.每个人的舞蹈技术由整数来决定.在舞蹈课的开始,他们从左到右站成一排.当这一排中至少有一对相邻的异性时,舞蹈技术相差最小的那一对会出列并开始跳舞.如果 ...

  2. 洛谷 P3378 【模板】堆

    2019-05-30 题目 : 洛谷 P3378 [模板]堆 : https://www.luogu.org/problemnew/show/P3378 题目描述 如题,初始小根堆为空,我们需要支持以 ...

  3. 洛谷P2085ssl1411OJ1370-最小函数值【堆,贪心】

    前言 有一个东西卡了我一会 折叠N*或N+ 正整数集 (由全体正整数组成的集合) N*:={1,2,3,-,n,-} 题目 洛谷P2085 OJ1370 给出n个ai,bi,ci.定义一个函数 fi( ...

  4. 洛谷:P2832 行路难(堆优化Dijkstra(错解)bfs(正解) + 记录路径)

    洛谷:P2832 行路难 写这道题确实是行路难- 此题的最短路约束不只是边权,还有边数(每经过一条边,之后经过的边权值都 +1+1+1 ) 从期望的角度分析,我们肯定是想 尽可能走的路程越短,走得路径 ...

  5. 洛谷 P3378 【模板】堆

    嗯... 这是一道堆的模板题,但我个人感觉最好的做法就是通过优先队列来进行操作... 首先我们看一下这道水题.... 题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示 ...

  6. 洛谷P1080-国王游戏-贪心+高精度

    P1080-国王游戏 啊啊啊,刚才已经写了一次了,但是Edge浏览器不知道为什么卡住了,难受. 好吧,其实是一道可做题,分析得到的贪心策略就是就是将a * b小的放在前面(其他的懒得说了),主要还是要 ...

  7. 洛谷P3378 【模板】堆

    题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...

  8. [洛谷]P1413 坚果保龄球 (#贪心 -1.18)

    题目描述 PVZ这款游戏中,有一种坚果保龄球.zombie从地图右侧不断出现,向左走,玩家需要从左侧滚动坚果来碾死他们. 我们可以认为地图是一个行数为6,列数为60的棋盘.zombie出现的那一秒站在 ...

  9. 洛谷 P1803题解 java 贪心

    题目描述 现在各大 oj 上有 nn 个比赛,每个比赛的开始.结束的时间点是知道的. yyy 认为,参加越多的比赛,noip 就能考的越好(假的). 所以,他想知道他最多能参加几个比赛. 由于 yyy ...

  10. 洛谷P1650:田忌赛马 ← 贪心算法

    [题目来源] https://www.luogu.com.cn/problem/P1650 [题目描述] 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马. ...

最新文章

  1. Java Web学习总结(11)JDBC
  2. 社会主义基本经济规律是经济效益规律
  3. hdu5248序列变换(二分+贪心)基础题
  4. cheat sheet for cs221 at stanford: good luck
  5. matlab练习_MATLAB教程-台大郭彦甫-第十四节,含练习答案
  6. mysql 有两种数据库引擎发音
  7. 求解九宫格的Java_使用全排列方法解九宫格问题
  8. Chrome developer tool介绍(javascript调试)
  9. Matplotlib使用指南
  10. mysql 删除表中 id不等于XXX的 并且XXX字段的重复记录
  11. tomcat8+linux+IDEA配置远程代码调试
  12. android:获取当前应用的版本
  13. Ubuntu 14.04 下安装wiznote客户端
  14. c# socket操作智嵌物联的网络继电器板
  15. Mac版本git下载和使用
  16. AutoCAD如何自动加载dll文件
  17. WPS Office常用快捷键大全
  18. Redis 列表(List) Redis Lpush 命令
  19. 在Novell NetWare中支持IP
  20. mysql多表关联数据删除

热门文章

  1. 聚客通微信scrm系统-微信个人号sdk云控方案实现非微信ipad/mac协议
  2. ArcGIS 解决影像裁剪后锯齿问题
  3. WPS思维导图去除背景的网格
  4. 计算机电源 通电,笔记本电脑开不了机,通电后电源指示灯不亮
  5. stm32开发环境搭建及应用
  6. 无线遥控433MHz编码发射
  7. 计算机添加启动程序,电脑如何设置开机启动项
  8. 毕业或者想转行做c++服务端开发的时候都很迷茫不知道从哪里开始学习?
  9. linux查看cpu架构命令,linux查看cpu型号命令
  10. Multimedia框架