AtCoder Beginner Contest 102/AtCoder Regular Contest 100

はい。
https://beta.atcoder.jp/contests/abc102

A - Multiple of 2 and N

C++14

#include<bits/stdc++.h>
using namespace std;
 
int main(){
    int n;
    scanf("%d",&n);
    printf("%d\n",n%2?n*2:n);
    return 0;
}

奇数なら2倍に、偶数ならそのままで。

B - Maximum Difference

C++14

#include<bits/stdc++.h>
using namespace std;
 
int main(){
    int n;
    scanf("%d",&n);
    vector<int>ar(n);
    for (auto&e:ar) {
        scanf("%d",&e);
    }
    sort(ar.begin(),ar.end());
    printf("%d\n",ar[n-1]-ar[0]);
    return 0;
}

ソートして末尾と先頭見てるけどmax,minでも出来そうな気がするような。差が最大になるのはmaxとmin見る以外にはないです。数列Aが全て同じ値になるテストケースもあるようですがそれならそれでどう比較しても差が0にしかならなかったりしますけどmax,min見る以外はないです。

C - Linear Approximation

Python3

n=int(input())
a=[int(i)-p for p,i in enumerate(input().split())]
a.sort()
ans=0
for i in range(n):
    ans+=abs(a[i]-a[n//2])
print(ans)

解説や他の人の解答をみてもあまり良くわかっておらず。最小にするためのbの値が中央値なのはそれはそうなのかーという。入力受取時に事前処理するのは-1,-2...-Nでも0,-1...-(N-1)でもこれは影響しない様子。全ての点が1つずつずれるかどうかだけだからかな。1~Nを事前に引いておくと最小値にするためには中央値に定まるというのそれはそうで。。