• 牛客寒假算法基础集训营1B题


    链接:https://ac.nowcoder.com/acm/contest/317/B
    来源:牛客网
     

    题目描述

    小a非常喜欢204204这个数字,因为′a′+′k′=204′a′+′k′=204。
    现在他有一个长度为nn的序列,其中只含有2,0,42,0,4这三种数字
    设aiai为序列中第ii个数,你需要重新排列这个数列,使得∑ni=1(ai−ai−1)2∑i=1n(ai−ai−1)2最大(公式的含义是:每个数与前一个数差的平方的和)
    注意:我们默认a0=0a0=0

    输入描述:

    第一行一个整数nn
    接下来一行nn个整数,第ii个数表示aiai

    输出描述:

    输出一个整数,表示∑ni=1(ai−ai−1)2∑i=1n(ai−ai−1)2的最大值

    示例1

    输入

    复制

    2
    2 4

    输出

    复制

    20

    说明

    样例1解释:按(4,2)(4,2)排列是最优的,此时sum=(4−0)2+(2−4)2=20sum=(4−0)2+(2−4)2=20

    示例2

    输入

    复制

    3
    2 0 4

    输出

    复制

    36

    说明

    样例2解释:按(4,0,2)(4,0,2)排列是最优的,此时sum=(4−0)2+(0−4)2+(2−0)2=36sum=(4−0)2+(0−4)2+(2−0)2=36

    示例3

    输入

    复制

    5 
    2 4 0 2 4

    输出

    复制

    52

    备注: 

    1⩽n⩽1051⩽n⩽105,保证aiai为2/0/42/0/4中的数

    官方题解:

    输入的序列其实用处不大,因为最终不需要输出方案,我们只需要记录下2/0/4分别出现的次数即可 一个显然的构造策略是首先放置4, 0, 4, 0,直到其中一个用光。 接下来如果4多余,那么可以按4,0,4,0,…,4,2,4,2,…(先4后2)的方法构造 如果0多余,可以按照4,0,4,0    …    4,0,2,0,2    …(先2后0)的方法构造 std中的a数组展示了其中一种最优的构造方案 实际上此题还可以推广到更一般的情况,也就是第一个位置放最大的,第二个位置放最小的,第三个位置放 第二大的以此类推,这种思路写起来也会更简单一些

    自己写的时候用暴力一直WA,还是代码能力太差了。

    这题就是贪心,先对数据排序,最大的数和最小的数差的平方,然后是第一个不大于最大的数和第一个不小于最小的数差的平方

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    int a[100000];
    int main()
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        a[0]=0;
        int k=a[0];
        int first=1,last=n;
        long long sum=0;
        sort(a+1,a+n+1);
        while(first<=last)
        {
            if(first<=last)
            {
                sum+=pow(a[last]-k,2);
                k=a[last];
                last-=1;
            }
            if(first<=last)
            {
                sum+=pow(a[first]-k,2);
                k=a[first];
                first+=1;
            }
        }
        cout<<sum<<endl;
    }
    
  • 相关阅读:
    第九周作业
    第八周
    第七周
    Jmeter连接到Mysql
    数据库常用链接URL写法
    功能测试方法
    常建输入框的测试
    系统业务流程测试(转)
    Linux
    搭建Git服务器
  • 原文地址:https://www.cnblogs.com/yyaoling/p/12260438.html
Copyright © 2020-2023  润新知