首页 > 其他 > 详细

1427:数列极差

时间:2019-06-07 13:28:12      阅读:123      评论:0      收藏:0      [点我收藏+]

1427数列极差

技术分享图片

 

[题解]

本题我是用优先队列做的QWQ

说说思路吧

 

这是一道贪心题

我们有一组数字

每次去掉两个 x , y,再加入一个新的 x*y+1

 

        如果保证最后得到一个最大的数字,那么每次去掉两个最小的数字,换来一个较大的数字(这样最后结果会越来越大)

        如果保证最后得到一个最小的数字,那么每次去掉两个最大的数字,换来一个新数字(由于你去掉了两个最大的数字,那么在最后你就失去了乘最大数让结果最大的机会,所以这个操作过程使得结果呈现递减趋势,结果就最小啦)

 

[代码]

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<functional>

using namespace std;

int n,maxn,minn,shu,x,y,ac[10001];
priority_queue<int,vector<int> ,greater<int> > a;
priority_queue<int> b; 

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&ac[i]);
    
    for(int i=1;i<=n;i++)
        a.push(ac[i]);  
    for(int i=1;i<=n;i++)
        b.push(ac[i]);
    
    for(int i=1;i<=n-1;i++)
    {
        x=a.top();
        a.pop();
        y=a.top();
        a.pop();
        a.push(x*y+1);
        
    }
    maxn=a.top();
    
    for(int i=1;i<=n-1;i++)
    {
        x=b.top();
        b.pop();
        y=b.top();
        b.pop();
        b.push(x*y+1);
    }
    minn=b.top();
  
    printf("%d",maxn-minn);
    
    return 0;
}

 

1427:数列极差

原文:https://www.cnblogs.com/xiaoyezi-wink/p/10988008.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!