【洛谷】P1878 舞蹈课
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;//模拟到头痛的一道题
//有一点细节出错就会全WA,自己思考不够全面细致的问题在这道题暴露的淋漓尽致//解题思路:
//建堆,然后每次得到差值最小的pop,再从两边找没有出列过的,并且异性的两个
#define abs(x) (x) < 0? -(x) : (x)
inline void read(int &x)
{register int f = 1;x = 0;register char c = getchar();while(c > '9' || c < '0'){if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9'){x = (x << 3) + (x << 1) + (c ^ 48);c = getchar();}x *= f;
}const int maxn = 2e5 + 5;
//每个节点就是一对异性
struct node
{int val, l, r;
// 初始化列表node(int _val, int _l, int _r):val(_val), l(_l), r(_r){}
// 重载运算符bool operator<(const node &rhs) const{
// 注意可能有差值相等的对,那么要让编号更小的先出列if(val != rhs.val)return val > rhs.val;else return l > rhs.l;}
};int v[maxn];
bool used[maxn];
priority_queue<node> q;
char s[maxn];
int main()
{int n; read(n);scanf("%s", s + 1);
// cout << s + 1;
// return 0;int b(0), g(0);for(int i = 1;i <= n; i++){
// 男女中最少的人数则为对数if(s[i] == 'B') b++;else g++;
// 异性则入队筛选read(v[i]);if(s[i-1] != s[i] && i != 1)q.push(node(abs(v[i] - v[i-1]), i-1, i));}int cnt;printf("%d\n", cnt = min(b, g));while(cnt && !q.empty()){int l = q.top().l;int r = q.top().r;q.pop();
// 没出列的才可以出列if(!used[l] && !used[r]){printf("%d %d\n", l, r);used[l] = used[r] = true;
// 往两边寻找没跳过的两个while(l > 0 && used[l]) l--;while(r <= n && used[r]) r++;
// 如果有的话且为异性则入队筛选if(l > 0 && r <= n && s[l] != s[r])q.push(node(abs(v[l] - v[r]), l, r));
// 每次出列则对数减一cnt--;}}return 0;
}
【洛谷】P1878 舞蹈课相关推荐
- 洛谷 P1878 舞蹈课 —— 小顶堆
This way 题意: 有 n个人参加一个舞蹈课.每个人的舞蹈技术由整数来决定.在舞蹈课的开始,他们从左到右站成一排.当这一排中至少有一对相邻的异性时,舞蹈技术相差最小的那一对会出列并开始跳舞.如果 ...
- 堆——以洛谷p3378,p1334,p1628,p1878为例
堆 堆的五个基本操作: 1.在集合中插入一个数 heap[++size]=x ; up[size] 2.求集合当中的最小值 heap[1] 3.删除最小值 ...
- 洛谷 深基 第4部分 基础数学与数论(19-21课)
洛谷 深基 第4部分 基础数学与数论 第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...
- 【暖*墟】#洛谷网课1.30# 树上问题
树上倍增 基环外向树DP DFS序与欧拉序 树链剖分 可以参考wjyyy的https://www.wjyyy.top/421.html wjyyy是这样说的: 树链剖分是一种优化,将树上最常经过的几条 ...
- 2021寒假——洛谷刷题计划(35题)
(希望大家不要Copy) AC:Accept,程序通过. CE:Compile Error,编译错误. PC:Partially Correct,部分正确. WA:Wrong Answer,答案错误. ...
- 【c++算法刷题笔记】——洛谷2
1. 洛谷练习--P1579 哥德巴赫猜想(升级版) 题目描述: 现在请你编一个程序验证哥德巴赫猜想. 先给出一个奇数n,要求输出3个质数,这3个质数之和等于输入的奇数. 输入格式: 仅有一行,包含一 ...
- 洛谷、牛客网、AcWing 刷题(python版)
牛客网python专项练习整理(一) https://blog.csdn.net/weixin_41913008/article/details/87203468 牛客网剑指offer--python ...
- 深度优先搜索——First Step(洛谷 P3654)
题目选自洛谷P3654 本题遍历每一个可以站人的点,然后利用dfs的思路判断每一个点向下和向右是否能满足条件:但是k=1时需要特判,因为k=1意味着向下和向右重复计算,需要除以2. 注意在dfs前先判 ...
- 排序——奖学金(洛谷 P1093)
题目选自洛谷P1093 这里不再讲述各种基本排序实现,如想了解可以参考我之前的算法里的几种排序算法知识点. 主要讲述在竞赛过程中,我们如何将排序算法运用到解题当中来,一般情况下,需要用到排序的时候,我 ...
- 【洛谷】入门2 分支结构
原题传送门 点我 P5710 [深基3.例2]数的性质 题目描述 一些数字可能拥有以下的性质: 性质 1:是偶数: 性质 2:大于 4 且不大于 12. 小A 喜欢这两个性质同时成立的数字:Uim 喜 ...
最新文章
- Python知识: scipy signal.chirp用法例
- centos6配置日志外发_CentOS6下记录后台操作日志的两种方式
- 配置nfs环境的一些命令
- Android——处理设备旋转Activity销毁时临时数据丢失的问题
- [HTML5实现人工智能]小游戏《井字棋》发布,据说IQ上200才能赢
- 在input标签里只能输入数字
- Bzoj2882 工艺
- 学生学籍管理系统源码
- Java编程练习题Demo71-Demo80
- 使用reflector反编译exe文件和dll文件
- nutch mysql hadoop_nutch+hadoop 配置使用
- 点击文本或按钮实现复制
- PMP 备考指南之计算题汇总
- 国际电话登机英文术语
- Urchin.exe使用说明
- android 指纹拍照,一加2评测:增加指纹识别/拍照性能出众
- 第3章 内核编程语言与环境(2)
- java.util.zip 类 ZipEntry
- PHP面试题2021和2022面试、跳槽必备大全!
- 数据库DDL数据定义语言