题意:

CodeForces 45C Dancing Lessons

博客搬新家,以后就是基本仅仅在自己的独立博客进行更新,欢迎訪问。

http://zihengoi.cn

题目描写叙述:

  题目链接:CodeForces 45C Dancing Lessons

题目大意:

  有n个人在上舞蹈课,每一个人都有相应的舞蹈技能值。全部人从左到右排成一行。要求在全部人中男女两两一组,组成舞伴。具体要求例如以下:

  • 若要组为舞伴则两人必须相邻。且两人舞蹈技能值差小的,优先组合,出队。
  • 存在多个可选舞伴的话,那么就从队首起左边的优先出队。

  • 抽走一对后,队伍合并,补齐空位。

问:最多能够出队多少队,而且按顺序输出跳舞成员编号(初始队列的左起位置)。


 

解题思路:

  依据题目的描写叙述能够非常easy的将整个舞蹈队和出队要求构造成一个优先队列。

队列的每一个结点包括信息有。左側学员编号,右側学员编号,技能值差。而出队的小于符号应以两个结点的技能值差为第一比較小的优先出队,若技能值差同样。则比較左側学员的编号,编号小的优先出队。


  另外使用数组llrr来标记每一个学员左右的学员编号,每次有人出队则更新相应两人的左右人员编号,且若相邻两者为异性则入队。

复杂度分析:

时间复杂度 :O(N)
空间复杂度 :O(N)

AC代码:

#include <cstring>
#include <queue>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstdio>
using namespace std;

const int maxn = (100010 << 1);
int skill[maxn];
bool cp[maxn];
int r[maxn],l[maxn];
char que[maxn];
struct node{
    int b,g,c;
    bool operator < (const node& a) const{
        if(c == a.c)return b > a.b;
        else return c > a.c;
    }
};
priority_queue<node>Q;
int main()
{
    int n;
    while(cin>>n)
    {
        cin >> que+1;
        node tmp;
        int cup = 0;
        for(int i = 1; i <= n; i++){
            l[i] = i - 1;
            r[i] = i + 1;
            if(que[i] == 'B')cup++;
            cin >> skill[i];
        }
        cup = min(n - cup, cup);
        while(!Q.empty()) Q.pop();
        for(int i = 1; i < n; i++)
            if(que[i] != que[i+1]){
                tmp.b = i;
                tmp.g = i+1;
                tmp.c = abs(skill[i] - skill[i+1]);
                Q.push(tmp);
            }
        memset(cp,false,sizeof(cp));
        cout<< cup << endl;
        while(cup--)

        {
            while(!Q.empty())
            {
                tmp=Q.top();
                Q.pop();
                if(!cp[tmp.b]&&!cp[tmp.g])
                {
                    cout<< tmp.b << " " << tmp.g << endl;
                    cp[tmp.b] = cp[tmp.g] = true;
                    break;
                }
            }
       int lc=l[tmp.b],rc=r[tmp.g];
            r[lc] = rc;
            l[rc] = lc;
            tmp.b = lc;
            tmp.g = rc;
            tmp.c = abs(skill[lc]-skill[rc]);
            if(lc > 0 && rc <= n && que[lc] != que[rc]) Q.push(tmp);
        }
    }
}
版权声明:转载请注明转自http://blog.csdn.net/a15129395718。独立博客:http://zihengoi.cn欢迎訪问
  • 本文已收录于下面专栏:

Codeforces 446B DZY Loves Modification 矩阵行列分开考虑 优先队列+构造

题目链接:点击打开链接 题意: 给定n行m列的矩阵 k次操作。一个常数p ans = 0; 对于每次操作 能够任选一行或一列, 则ans += 这行(列)的数字和 然后这行(列)上的每一个数...
  • qq574857122
  • qq574857122
  • 2014年07月14日 12:46
  • 1131

java之_队列(PriorityQueue 优先级队列)

PriorityQueue 一个基于优先级堆的无界优先级队列。优先级队列的元素依照其自然顺序进行排序,或者依据构造队列时提供的 Comparator 进行排序。详细取决于所使用的构造方法。优先级队列...
  • zhouguosen_always
  • zhouguosen_always
  • 2013年11月19日 14:25
  • 4904

STL 栈,队列,优先队列用法

STL 中栈的用法(stack) #include stack> 基本操作: push(x) 将x增加栈中,即入栈操作 pop() 出栈操作(删除栈顶),仅仅是出栈,没有返回值 top(...
  • Crayon_DyS
  • Crayon_DyS
  • 2013年11月15日 00:52
  • 10913

CodeForces 45C Dancing Lessons

链接:http://codeforces.com/problemset/problem/45/C Dancing Lessons time limit per test:2 s...
  • Silenceneo
  • Silenceneo
  • 2015年08月16日 11:53
  • 809

Codeforces 45C. Dancing Lessons (SBT)

题意:n个人站成一行,从左到右编号1到n,每人一个技巧值。若相邻的两个人性别不同,则这两人有可能一起跳舞。 每次操作。从全部可能一起跳舞的两人中,选出技巧最接近的两人。若有多种方案。则选择最靠左边的(...
  • u012891242
  • u012891242
  • 2015年09月06日 20:37
  • 407

Codeforces 134C Swaps (bfs+优先队列)【模板】

There are n players sitting at a round table. All of them have s cards of n colors in total. Besides...
  • qq_38538733
  • qq_38538733
  • 2017年08月08日 20:15
  • 190

CodeForces 140C 贪心+优先队列

Description 如今来做雪人,每一个雪人由三个不同大小的雪球构成:一个大的,一个中等的,一个小的。如今有 n 个雪球半径分别为 r1, r2, ..., rn. 为了做雪人,三个雪球的大小必须...
  • HowardEmily
  • HowardEmily
  • 2016年11月25日 21:39
  • 382

CodeForces - 681C 【优先队列】

传送门 优先队列在语法(推入,删除)上与普通队列一样,不同在于声明时要这样:priority_queue#include #include #include using namespace std;...
  • Anxdada
  • Anxdada
  • 2017年06月23日 09:42
  • 95

Codeforces Round #357 (Div. 2) C. Heap Operations(模拟,优先队列)

三个操作。简单模拟,让不合法的操作变成合法就可以。 insert x — put the element with value x in the heap;getMin x — ...
  • CillyB
  • CillyB
  • 2016年11月04日 12:24
  • 179

[CodeForces - 140C New Year Snowmen] 贪心 + STL 优先队列

[CodeForces - 140C New Year Snowmen] 贪心 + STL 优先队列 题目链接:[CodeForces - 140C New Year Snowmen]   题意:...
  • ACMore_Xiong
  • ACMore_Xiong
  • 2016年08月03日 22:27
  • 577
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CodeForces 45C Dancing Lessons 优先队列
举报原因:
原因补充:

(最多仅仅同意输入30个字)

posted on 2018-01-11 12:55  yjbjingcha  阅读(173)  评论(0编辑  收藏  举报

导航