有n个人参加一个舞蹈课。每个人的舞蹈技术由整数ai来决定。在舞蹈课的开始,他们从左到右站成一排。当这一排中至少有一对相邻的异性时,舞蹈技术相差最小的那一对会出列并开始跳舞。如果相差最小的不止一对,那么最左边的那一对出列。一对异性出列之后,队伍中的空白按原顺序补上(即:若队伍为ABCD,那么BC出列之后队伍变为AD)。舞蹈技术相差最小即是ai差的的绝对值最小。
你的任务是,模拟以上过程,确定跳舞的配对及顺序。
输入
第一行为正整数n(<=n<=*^)为队伍中的人数。
下一行包含n个字符B或者G,B代表男,G代表女。
下一行为n个整数ai(ai<=^)。
所有信息按照从左到右的顺序给出。
在50%的数据中,n<=。
输出
第一行:出列的总对数k。接下来输出k行,每行是两个整数。按跳舞顺序输出,两个整数代表这一对舞伴的编号(按输入顺序从左往右1至n编号)。请先输出较小的整数,再输出较大的整数。
样例输入1 BGBG 样例输出1 样例输入2 BGBB 样例输出2

问题描述

解:50%的做法,直接模拟就可以了

正解:乱搞

想办法将模拟过程优化

主要分为两个优化,

1)将找最小值部分优化,

将所需信息用结构体记录下来,

用优先队列按照题目要求排序

2)将相邻两个人之间的关系用链表维护,

这样在出队时的关系维护可以做到O(1)

剩下的细节自己想(看代码)。

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<queue>
#include<cmath>
using namespace std;
const int N=2e5+;
struct node{
int c,l,r;
bool operator < (const node &x) const{
if(c!=x.c) return c>x.c;
else return l>x.l;
}
}e[N],g[N];
priority_queue<node>q;
int n,a[N],L[N],R[N];
int k,qc,ql,qr;
bool v[N];
char s[N];
bool ok(int x){return (x>= && x<=n);}
int main()
{
freopen("dancingLessons.in","r",stdin);
freopen("dancingLessons.out","w",stdout);
scanf("%d",&n);scanf("%s",s+);
for(int i=;i<=n;++i)
{
scanf("%d",&a[i]);
L[i]=i-;R[i]=i+;
}
for(int i=;i<=n;++i)
if(s[i]!=s[i-])
q.push((node){abs(a[i]-a[i-]),i-,i});
while(!q.empty())
{
qc=q.top().c;ql=q.top().l;
qr=q.top().r;
if(v[ql] || v[qr])
{
q.pop();continue;
}
v[ql]=v[qr]=;
g[++k]=q.top();q.pop();
L[R[qr]]=L[ql];R[L[ql]]=R[qr];
if(ok(L[ql]) && ok(R[qr]))
if(s[L[ql]]!=s[R[qr]])
{
qc=abs(a[L[ql]]-a[R[qr]]);
ql=L[ql];qr=R[qr];
// cout<<ql<<" "<<qr<<endl;
q.push((node){qc,ql,qr});
}
}
printf("%d\n",k);
for(int i=;i<=k;++i)
printf("%d %d\n",g[i].l,g[i].r);
return ;
}

舞蹈课(dancingLessons)的更多相关文章

  1. 洛谷 P1878 舞蹈课 解题报告

    P1878 舞蹈课 题目描述 有\(n\)个人参加一个舞蹈课.每个人的舞蹈技术由整数来决定.在舞蹈课的开始,他们从左到右站成一排.当这一排中至少有一对相邻的异性时,舞蹈技术相差最小的那一对会出列并开始 ...

  2. 【Luogu P1878】舞蹈课

    Luogu P1878 事实上这道题并不难,但我真没弄懂我手写堆为什么过不了.所以 STL大法好!!! 基本思路 对于每一对相邻异性,将他们的舞蹈技术的差插入一个堆 通过维护这个小根堆,每次就可以取得 ...

  3. 9.29noip模拟试题

    环上的游戏(cycle) 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这 ...

  4. 2014-9-13 NOIP模拟赛

    NOIP2014模拟赛 ——lwher 题目名 环上的游戏 舞蹈课 数位和乘积 源文件 cycle.cpp/c/pas dancingLessons.pas/cpp digit.cpp.cpp/c/p ...

  5. 二模01day1解题报告

    T1.音量调节(changingsounds) 有n个物品的背包(有点不一样,每个物品必须取),给出初始价值,物品价值可正可负(就是两种选择嘛),求可能的最大价值,不可能(<0或>maxs ...

  6. Bruce Eckel:编程生涯(转载)

    Bruce Eckel:编程生涯(转载) 说明:Bruce Eckel 著有大名鼎鼎的<Thinking in C++>和<Thinking in Java>.本文是他对程序员 ...

  7. 01day1

    最大音量 动态规划 题意:给出一个初始值和一个变化序列 c,在第 i 步可以加上或减去 c[i],求 n 步之后能达到的最大值.有一个限定值 maxlevel,在变化过程中值不能超过 maxlevel ...

  8. TED Talk-教育如何扼杀创造力

    TED上面有个"11个必须看的TED演讲"的播放列表,"教育扼杀创新"是其中一个.下面贴的是演讲的中文翻译. 早上好. 前面的演讲都很好,对不对? 我已经完全被 ...

  9. 20165318 预备作业二 学习基础和C语言基础调查

    20165318 学习基础和C语言基础调查 技能学习经验 我们这一代人,或多或少的都上过各种兴趣班,舞蹈钢琴画画书法,我也是如此.可这些技能中,唯一能拿的出手的就是舞蹈了.按照<优秀的教学方法- ...

随机推荐

  1. vue-router实现组件间的跳转---参数传递

    四.通过VueRouter来实现组件之间的跳转:参数的传递 login ---用户名--->main ①明确发送方和接收方②配置接收方的路由地址 {path:'/myTest',componen ...

  2. Java ——异常处理

    本节重点思维导图 详细戳——> 异常处理

  3. 手工设计神经MNIST使分类精度达到98%以上

    设计了两个隐藏层,激活函数是tanh,使用Adam优化算法,学习率随着epoch的增大而调低 import tensorflow as tf from tensorflow.examples.tuto ...

  4. JAVA第四周总结与实验2

    实验二 Java简单类与对象 一. 实验目的 (1) 掌握类的定义,熟悉属性.构造函数.方法的作用,掌握用类作为类型声明变量和方法返回值: (2) 理解类和对象的区别,掌握构造函数的使用,熟悉通过对象 ...

  5. spring cloud gateway自定义过滤器

    在API网关spring cloud gateway和负载均衡框架ribbon实战文章中,主要实现网关与负载均衡等基本功能,详见代码.本节内容将继续围绕此代码展开,主要讲解spring cloud g ...

  6. 获取程序所有加载的dll名称

    1.在任务管理器输入如下指令.输出到文件:tasklist /m >c:\dll.txt 输出到命令行 tasklist /m 2.使用工具软件https://files.cnblogs.com ...

  7. 为什么 Java 线程没有 Running 状态?

    Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事.具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态: 什么 ...

  8. 洛谷 - P1522 - 牛的旅行 - Cow Tours - Floyd

    https://www.luogu.org/problem/P1522 好坑啊,居然还有直径不通过新边的数据,还好不是很多. 注意一定要等Floyd跑完之后再去找连通块的直径,不然一定是INF. #i ...

  9. 有十个div,怎样实现选中其中一个,改变其背景色,另外九个不变,当选中另一个时又改变另一个的背景色

    这个是jq写的,可以自己下载一个js库,配上这个就可以了,里面的div可以用class控制,比如你10个div class为a1 也就是<div class="a1"> ...

  10. rest_framework框架的版本

    REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES':['rest_framework.renderers.JSONRenderer','rest_framewo ...