zoukankan      html  css  js  c++  java
  • 1004—p1m2

    1004—p1m2

    题目:

    p1m2

     
     Accepts: 1003
     
     Submissions: 4595
     Time Limit: 2000/1000 MS (Java/Others)
     
     Memory Limit: 131072/131072 K (Java/Others)
    Problem Description

    度度熊很喜欢数组!!

    我们称一个整数数组为稳定的,若且唯若其同时符合以下两个条件:

    1. 数组里面的元素都是非负整数。
    2. 数组里面最大的元素跟最小的元素的差值不超过 11。

    举例而言,[1, 2, 1, 2][1,2,1,2] 是稳定的,而 [-1, 0, -1][1,0,1] 跟 [1, 2, 3][1,2,3] 都不是。

    现在,定义一个在整数数组进行的操作:

    • 选择数组中两个不同的元素 aa 以及 bb,将 aa 减去 22,以及将 bb 加上 11。

    举例而言,[1, 2, 3][1,2,3] 经过一次操作后,有可能变为 [-1, 2, 4][1,2,4] 或 [2, 2, 1][2,2,1]。

    现在给定一个整数数组,在任意进行操作后,请问在所有可能达到的稳定数组中,拥有最大的『数组中的最小值』的那些数组,此值是多少呢?

    Input

    输入的第一行有一个正整数 TT,代表接下来有几组测试数据。

    对于每组测试数据: 第一行有一个正整数 NN。 接下来的一行有 NN 个非负整数 x_ixi​​,代表给定的数组。

    • 1 le N le 3 imes 10^51N3×105​​
    • 0 le x_i le 10^80xi​​108​​
    • 1 le T le 181T18
    • 至多 11 组测试数据中的 N > 30000N>30000
    Output

    对于每一组测试数据,请依序各自在一行内输出一个整数,代表可能到达的平衡状态中最大的『数组中的最小值』,如果无法达成平衡状态,则输出 -11。

    Sample Input
    2
    3
    1 2 4
    2
    0 100000000
    
    
    Sample Output
    2
    33333333

     

    思路:

         直接二分答案即可,对于每个答案,计算原来数组需要加1的操作次数以及需要减2的操作次数,通过比较两者的大小来缩小上界或下界。时间复杂度为O(nlog(n))。

    代码:

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int MAXN = 3e5+20;
    typedef long long ll;
    ll a[MAXN], n;
    
    ll check(ll ans)
    {
        ll t1=0, t2=0;  ///t1表示需要加1的操作次数,t2表示需要减2的操作次数
        for(int i=1; i<=n; i++)
        {
            if(ans>a[i])
            {
                t1+=(ans-a[i]);
            }
            else if(ans<a[i])
            {
                t2+=(a[i]-ans)/2;
            }
        }
    
        return t1<=t2;
    
    }
    
    int main()
    {
        int t;
        scanf("%d", &t);
        while(t--)
        {
    
            scanf("%d", &n);
            for(int i=1; i<=n; i++)
                scanf("%I64d", &a[i]);
    
            ll  l = 0, r = 1e9;
            while(l+1< r)
            {
                ll mid = (l + r) >> 1;
                if(check(mid))
                {
                    l = mid;
                }
                else
                {
                    r = mid;
                }
            }
            printf("%I64d
    ", l);
    
    
        }
    
        return 0;
    }
  • 相关阅读:
    office 2007
    关于网站爬虫的爬取
    华为交换机默认密码大合集
    一些不错的网站工具箱
    HDU 2023 求平均成绩
    HDU 2056 Rectangles
    HDU 2022 海选女主角
    HDU 2045 不容易系列之(3)—— LELE的RPG难题
    HDU 2042 不容易系列之二
    HDU 2044 一只小蜜蜂...
  • 原文地址:https://www.cnblogs.com/longl/p/9466445.html
Copyright © 2011-2022 走看看