zoukankan      html  css  js  c++  java
  • loj10005数列极差

    题目描述

    佳佳的老师在黑板上写了一个由  n个正整数组成的数列,要求佳佳进行如下操作:每次擦去其中的两个数 a 和 b,然后在数列中加入一个数 a*b+1,如此下去直至黑板上剩下一个数为止,在所有按这种操作方式最后得到的数中,最大的为 max,最小的为 min, 则该数列的极差定义为 M=max-min

    由于佳佳忙于准备期末考试,现请你帮助他,对于给定的数列,计算出相应的极差M 

    输入格式

    第一行为一个正整数 n 表示正整数序列的长度;
    在接下来的 n 行中,每行输入一个正整数。
    接下来的一行有一个 0,表示数据结束。

    输出格式

    输出只有一行,为相应的极差d 

    样例

    样例输入

    3
    1
    2
    3
    0
    

    样例输出

    2
    

    数据范围与提示

    对于全部数据n<=50000,保证所有数据计算均在 32 位有符号整数范围内。

    _____________________________________________

    贪心,题目很简单。

    主要联系priority_queue了,不要用。不如heap好用。主要问题出在仿函数上。

    优先队列中直接用仿函数不行,要用结构体内重载运算符,或者重新定义一个结构体,在结构体内重载小括号(),当然也就是仿函数。没有heap灵活好用!

    _____________________________________________

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=5e4+10;
     4 int n,mx,mn;
     5 int sz[maxn];
     6 vector<int>q,p;
     7 bool cmp(int x,int y)
     8 {
     9     return x>y;
    10 }
    11 
    12 int main()
    13 {
    14     scanf("%d",&n);
    15     for(int x,i=1;i<=n;++i)
    16     {
    17         scanf("%d",&x);
    18         q.push_back(x);
    19         push_heap(q.begin(),q.end());
    20         p.push_back(x);
    21         push_heap(p.begin(),p.end(),cmp);
    22     }
    23     scanf("%d",&mn);
    24     while(q.size()>1)
    25     {
    26         int a=q[0];
    27         pop_heap(q.begin(),q.end());q.pop_back();
    28         int b=q[0];
    29         pop_heap(q.begin(),q.end());q.pop_back();
    30         q.push_back(a*b+1);
    31         push_heap(q.begin(),q.end());
    32     }
    33     mn=q[0];
    34     while(p.size()>1)
    35     {
    36         int a=p[0];
    37         pop_heap(p.begin(),p.end(),cmp);p.pop_back();
    38         int b=p[0];
    39         pop_heap(p.begin(),p.end(),cmp);p.pop_back();
    40         p.push_back(a*b+1);
    41         push_heap(p.begin(),p.end(),cmp);
    42     }
    43     mx=p[0];
    44     cout<<mx-mn;
    45     return 0;
    46 }
    View Code
  • 相关阅读:
    Android之普通对话框
    Android之TelephonyManager类的使用案例
    Android之快捷方式一——通过应用程序创建快捷方式
    Android之手机电池电量应用
    Android之TelephonyManager类的方法详解
    Android之菜单二——上下文菜单
    jpa一对多映射案例
    Android之桌面组件App Widget初探
    Android之列表对话框
    Android之快捷方式二——向Launcher添加快捷方式
  • 原文地址:https://www.cnblogs.com/gryzy/p/13960850.html
Copyright © 2011-2022 走看看