Tenka1 Programmer Contest C - Align

链接 Tenka1 Programmer Contest C - Align

  • 给定一个序列,要求重新排列最大化\(\sum_{i=2}^{i=n} |a_i-a_{i-1}|\),\(n\leq 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;
}

原文地址:https://www.cnblogs.com/Tyher/p/9863504.html

时间: 2024-10-08 21:49:43

Tenka1 Programmer Contest C - Align的相关文章

【AtCoder】Tenka1 Programmer Contest 2019

Tenka1 Programmer Contest 2019 C - Stones 题面大意:有一个01序列,改变一个位置上的值花费1,问变成没有0在1右边的序列花费最少多少 直接枚举前i个都变成0即可 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space

Atcoder Tenka1 Programmer Contest 2019

C 签到题,f[i][0/1]表示以i结尾最后一个为白/黑的最小值,转移显然. #include<bits/stdc++.h> using namespace std; const int N=2e5+7; int n,f[N][2]; char s[N]; int main() { scanf("%d",&n); scanf("%s",s+1); for(int i=1;i<=n;i++) if(s[i]=='.') { f[i][0]=

Tenka1 Programmer Contest 2019 D - Three Colors

Three Colors 思路:dp 设sum为所有边的总和 不能组成三角形的情况:某条边长度>=ceil(sum/2),可以用dp求出这种情况的方案数,然后用总方案数减去就可以求出答案. 注意当某两条边都为sum/2的时候,dp会多算一次,要减去多算的方案数,多算的方案数也可以用dp求 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> u

转摘&lt;&lt;On becoming an expert C programmer&gt;&gt;

The following is from an EMail message that I sent to to an individual on 12-Apr-2001. You may find this EMail message useful. The Writer asked: ``I just recently visited your website ... Just wanted to say greetings and ask a simple question: Do you

SmartRF Flash Programmer突然打不开显示界面的办法【亲测有效】

在尝试打开任务管理器结束任务之后重新打开依然无果,在尝试了SmartRF Flash Programmer卸载重装无数次之后依然无果的况状,我被SmartRF Flash Programmer存在界面无法显示的bug折服了. 不过最终还是解决了,今天就来总结一下: 1.首先打开SmartRF Flash Programmer: 2.打开任务管理器,在任务管理器里右键点击,将其最大化: 3.关闭SmartRF Flash Programmer 4.重新打开SmartRF Flash Program

April Fools Contest 2017 题解&amp;源码(A,数学 B,数学 C,数学 D,字符串 E,数字逻辑 F,排序,卡时间)

A. Numbers Joke time limit per test:2 seconds memory limit per test:64 megabytes input:standard input output:standard output Input The input contains a single integer a (1 ≤ a ≤ 30). Output Output a single integer. Example Input 3 Output 27 题目链接:http

computer systems work from a programmer&#39;s perspective

2. typedef unsigned char *byte_pointer; void show_bytes(byte_pointer start, size_t len) { int i; for (i=0;i<len;i++) printf(" %.2x",start[i]; printf("\n"); } void inplace_swap(int *x,int *y) { *y = *x^*y; *x = *x^*y; *y = *x^*y; } c

ACM: POJ 3660 Cow Contest - Floyd算法

链接 Cow Contest Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Eac

程序员能力矩阵Programmer Competency Matrix

注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识. 计算机科学 Computer Science 软件工程 Software Engineering     程序设计 Programming         经验 Experience 学识 Knowledge 软件界一个无可争议的事实是,不同程序员的效率有差别,而且差别很大.许多专家将优秀程序员和一般程序员区分地很清楚. 大多数研究得出结论认为,一般程序员跟优秀程序员之间在工作效率和质量上存在10:1的关系:优秀