#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 舞蹈课相关推荐

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

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

  2. 堆——以洛谷p3378,p1334,p1628,p1878为例

    堆 堆的五个基本操作: 1.在集合中插入一个数      heap[++size]=x  ;  up[size] 2.求集合当中的最小值      heap[1] 3.删除最小值           ...

  3. 洛谷 深基 第4部分 基础数学与数论(19-21课)

    洛谷 深基 第4部分 基础数学与数论  第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...

  4. 【暖*墟】#洛谷网课1.30# 树上问题

    树上倍增 基环外向树DP DFS序与欧拉序 树链剖分 可以参考wjyyy的https://www.wjyyy.top/421.html wjyyy是这样说的: 树链剖分是一种优化,将树上最常经过的几条 ...

  5. 2021寒假——洛谷刷题计划(35题)

    (希望大家不要Copy) AC:Accept,程序通过. CE:Compile Error,编译错误. PC:Partially Correct,部分正确. WA:Wrong Answer,答案错误. ...

  6. 【c++算法刷题笔记】——洛谷2

    1. 洛谷练习--P1579 哥德巴赫猜想(升级版) 题目描述: 现在请你编一个程序验证哥德巴赫猜想. 先给出一个奇数n,要求输出3个质数,这3个质数之和等于输入的奇数. 输入格式: 仅有一行,包含一 ...

  7. 洛谷、牛客网、AcWing 刷题(python版)

    牛客网python专项练习整理(一) https://blog.csdn.net/weixin_41913008/article/details/87203468 牛客网剑指offer--python ...

  8. 深度优先搜索——First Step(洛谷 P3654)

    题目选自洛谷P3654 本题遍历每一个可以站人的点,然后利用dfs的思路判断每一个点向下和向右是否能满足条件:但是k=1时需要特判,因为k=1意味着向下和向右重复计算,需要除以2. 注意在dfs前先判 ...

  9. 排序——奖学金(洛谷 P1093)

    题目选自洛谷P1093 这里不再讲述各种基本排序实现,如想了解可以参考我之前的算法里的几种排序算法知识点. 主要讲述在竞赛过程中,我们如何将排序算法运用到解题当中来,一般情况下,需要用到排序的时候,我 ...

  10. 【洛谷】入门2 分支结构

    原题传送门 点我 P5710 [深基3.例2]数的性质 题目描述 一些数字可能拥有以下的性质: 性质 1:是偶数: 性质 2:大于 4 且不大于 12. 小A 喜欢这两个性质同时成立的数字:Uim 喜 ...

最新文章

  1. Python知识: scipy signal.chirp用法例
  2. centos6配置日志外发_CentOS6下记录后台操作日志的两种方式
  3. 配置nfs环境的一些命令
  4. Android——处理设备旋转Activity销毁时临时数据丢失的问题
  5. [HTML5实现人工智能]小游戏《井字棋》发布,据说IQ上200才能赢
  6. 在input标签里只能输入数字
  7. Bzoj2882 工艺
  8. 学生学籍管理系统源码
  9. Java编程练习题Demo71-Demo80
  10. 使用reflector反编译exe文件和dll文件
  11. nutch mysql hadoop_nutch+hadoop 配置使用
  12. 点击文本或按钮实现复制
  13. PMP 备考指南之计算题汇总
  14. 国际电话登机英文术语
  15. Urchin.exe使用说明
  16. android 指纹拍照,一加2评测:增加指纹识别/拍照性能出众
  17. 第3章 内核编程语言与环境(2)
  18. java.util.zip 类 ZipEntry
  19. PHP面试题2021和2022面试、跳槽必备大全!
  20. 数据库DDL数据定义语言

热门文章

  1. 实型变量的定义和应用
  2. 阿里云ECS安骑士离线修复步骤
  3. MyBatis逆向工程
  4. 小狼毫 Rime 输入法任务导向式常用参数修改指南
  5. 正态性检验中的统计量D值和统计量W值如何计算?
  6. Python3学习笔记(1): print函数用法总结
  7. Simulink中利用Powergui进行FFT分析,但是信号源始终为空
  8. python3 使用writerows写入csv时有多余空行的处理办法
  9. 苹果iphone5/iphone5s充电器(A1443)及电路原理图
  10. HTML 标题居中 小小积累