zoukankan      html  css  js  c++  java
  • Tenka1 Programmer Contest C

    链接 Tenka1 Programmer Contest C - Align

    • 给定一个序列,要求重新排列最大化(sum_{i=2}^{i=n} |a_i-a_{i-1}|)(nleq 10^5)
    • 小清新贪心,首先把最大的先放好,然后依次考虑下面四种决策:
    • 左边放最小,右边放最小,左边放最大,右边放最大。
    • 每次取(max)并更新左右端点,这样一定能取到最大最小的波浪形态,最大值旁边放两个最小不会更差。
    #include<bits/stdc++.h>
    #define R register int
    #define ll long long 
    using namespace std;
    const int N=100001;
    int n,w[N],res[N],le,ri,z,y;ll ans;
    int gi(){
        R x=0,k=1;char c=getchar();
        while(c!='-'&&(c<'0'||c>'9'))c=getchar();
        if(c=='-')k=-1,c=getchar();
        while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();	
        return x*k;
    }
    int main(){
    	n=gi();
    	for(R i=1;i<=n;++i)w[i]=gi();
    	sort(w+1,w+n+1);
    	le=2,ri=n,z=w[1],y=w[1];
    	while(le<=ri){
    		R p=abs(w[le]-z),q=abs(w[le]-y),a=abs(w[ri]-z),b=abs(w[ri]-y),Mx=max(max(p,q),max(a,b));
    		if(Mx==p)z=w[le],le++;
    		else if(Mx==q)y=w[le],le++;
    		else if(Mx==a)z=w[ri],ri--;
    		else y=w[ri],ri--;
    		ans+=Mx;
    	}
    	cout<<ans<<endl;
        return 0;
    }
    
    
  • 相关阅读:
    day23 GUI
    day17JDK5.0新特性与正则表达式
    day12-day15集合
    day11线程
    day10-JavaAPI
    day09面向对象-
    day08面向对象-内部类、异常
    day06面向对象
    Idea导入Eclipse中的Maven Web(SSM)
    java给图片添加水印
  • 原文地址:https://www.cnblogs.com/Tyher/p/9863504.html
Copyright © 2011-2022 走看看