• ARC121D


    ARC121D - 1 or 2

    题目大意

    给定(n)个数,现对其分组,每组(1-2)个数

    设每个分组内数的和为(s_i),定义一个分组的权值为(max{s_i}-min{s_i})

    最小化分组的权值


    分析

    当时我就被这玩意儿侮辱了

    如果每组数都要求拿两个,那么显然最优分组就是头尾匹配

    对于有1的情况,认为是和一个额外的0匹配,向原数组中加入若干0即可


    #include<bits/stdc++.h>
    using namespace std;
    const int N=100010;
    int n,a[N],b[N];
    typedef long long ll;
    ll Solve(int *a,int n){
    	if(n&1) return 1e18;
    	ll mi=1e18,ma=-1e18;
    	for(int i=1;i*2<=n;++i) {
    		mi=min(mi,(ll)a[i]+a[n-i+1]);
    		ma=max(ma,(ll)a[i]+a[n-i+1]);
    	}
    	return ma-mi;
    }
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i) scanf("%d",a+i);
    	sort(a+1,a+n+1);
    	ll ans=1e18;
    	for(int i=0;i<=n;++i) if(~(n+i)&1) {
    		int m=0;
    		for(int j=1;j<=n;++j) if(a[j]<=0) b[++m]=a[j];
    		for(int j=1;j<=i;++j) b[++m]=0;
    		for(int j=1;j<=n;++j) if(a[j]>0) b[++m]=a[j];
    		ans=min(ans,Solve(b,m));
    	}
    	printf("%lld
    ",ans);
    }
    
  • 相关阅读:
    Redis主从、事务、哨兵、消息、代理分片
    Java中反射
    java操作文件流对象
    Java中线程和线程池
    杂记
    Hadoop伪分布式环境快速搭建
    Git 基础
    React Context(一):隐式传递数据
    搭建React项目(一):在网页中使用
    jQuery MD5 加密
  • 原文地址:https://www.cnblogs.com/chasedeath/p/14829035.html
Copyright © 2020-2023  润新知