洛谷P1878 舞蹈课 贪心 堆
洛谷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 舞蹈课 贪心 堆相关推荐
- 洛谷 P1878 舞蹈课 —— 小顶堆
This way 题意: 有 n个人参加一个舞蹈课.每个人的舞蹈技术由整数来决定.在舞蹈课的开始,他们从左到右站成一排.当这一排中至少有一对相邻的异性时,舞蹈技术相差最小的那一对会出列并开始跳舞.如果 ...
- 洛谷 P3378 【模板】堆
2019-05-30 题目 : 洛谷 P3378 [模板]堆 : https://www.luogu.org/problemnew/show/P3378 题目描述 如题,初始小根堆为空,我们需要支持以 ...
- 洛谷P2085ssl1411OJ1370-最小函数值【堆,贪心】
前言 有一个东西卡了我一会 折叠N*或N+ 正整数集 (由全体正整数组成的集合) N*:={1,2,3,-,n,-} 题目 洛谷P2085 OJ1370 给出n个ai,bi,ci.定义一个函数 fi( ...
- 洛谷:P2832 行路难(堆优化Dijkstra(错解)bfs(正解) + 记录路径)
洛谷:P2832 行路难 写这道题确实是行路难- 此题的最短路约束不只是边权,还有边数(每经过一条边,之后经过的边权值都 +1+1+1 ) 从期望的角度分析,我们肯定是想 尽可能走的路程越短,走得路径 ...
- 洛谷 P3378 【模板】堆
嗯... 这是一道堆的模板题,但我个人感觉最好的做法就是通过优先队列来进行操作... 首先我们看一下这道水题.... 题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示 ...
- 洛谷P1080-国王游戏-贪心+高精度
P1080-国王游戏 啊啊啊,刚才已经写了一次了,但是Edge浏览器不知道为什么卡住了,难受. 好吧,其实是一道可做题,分析得到的贪心策略就是就是将a * b小的放在前面(其他的懒得说了),主要还是要 ...
- 洛谷P3378 【模板】堆
题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...
- [洛谷]P1413 坚果保龄球 (#贪心 -1.18)
题目描述 PVZ这款游戏中,有一种坚果保龄球.zombie从地图右侧不断出现,向左走,玩家需要从左侧滚动坚果来碾死他们. 我们可以认为地图是一个行数为6,列数为60的棋盘.zombie出现的那一秒站在 ...
- 洛谷 P1803题解 java 贪心
题目描述 现在各大 oj 上有 nn 个比赛,每个比赛的开始.结束的时间点是知道的. yyy 认为,参加越多的比赛,noip 就能考的越好(假的). 所以,他想知道他最多能参加几个比赛. 由于 yyy ...
- 洛谷P1650:田忌赛马 ← 贪心算法
[题目来源] https://www.luogu.com.cn/problem/P1650 [题目描述] 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马. ...
最新文章
- Java Web学习总结(11)JDBC
- 社会主义基本经济规律是经济效益规律
- hdu5248序列变换(二分+贪心)基础题
- cheat sheet for cs221 at stanford: good luck
- matlab练习_MATLAB教程-台大郭彦甫-第十四节,含练习答案
- mysql 有两种数据库引擎发音
- 求解九宫格的Java_使用全排列方法解九宫格问题
- Chrome developer tool介绍(javascript调试)
- Matplotlib使用指南
- mysql 删除表中 id不等于XXX的 并且XXX字段的重复记录
- tomcat8+linux+IDEA配置远程代码调试
- android:获取当前应用的版本
- Ubuntu 14.04 下安装wiznote客户端
- c# socket操作智嵌物联的网络继电器板
- Mac版本git下载和使用
- AutoCAD如何自动加载dll文件
- WPS Office常用快捷键大全
- Redis 列表(List) Redis Lpush 命令
- 在Novell NetWare中支持IP
- mysql多表关联数据删除