• 1427:数列极差


    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;
    }
  • 相关阅读:
    [ZOJ1610]Count the Colors
    浅谈算法——线段树之Lazy标记
    浅谈算法——线段树
    [HEOI2013]Segment
    [JSOI2008]Blue Mary开公司
    [JSOI2016]扭动的回文串
    [BZOJ3790]神奇项链
    [BZOJ2565]最长双回文串
    [BZOJ2160]拉拉队排练
    [POI2010]Antisymmetry
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/10988008.html
Copyright © 2020-2023  润新知