Problem:
Problem C : War
A国とB国という２つの国が戦争をしている。A国の軍人であるあなたは
n
人の兵士を率いて、B国の領土を占領する事になった。
B国の領土は２次元グリッドで表されている。あなたが最初に占領する場所は二次元グリッド上のある１マスである。
あなたが率いている兵士たちは、それぞれ
h
i
の体力を持っている。
それぞれの兵士は体力を1を消費して移動することができる。
現在いるマスを(a,b)とすると、(a+1,b),(a-1,b),(a,b+1),(a,b-1)の4方向を移動先として選ぶことが可能である。
兵士は体力が0になったらそこから動くことができなくなる。
一人以上の兵士が通過したマスはすべて占領することができる。
あなたの仕事は、最大でいくつのマスを占領することができるかを求めることである。
ただし、この２次元グリッドのサイズは無限に広いとすること。
Input
入力は以下のフォーマットで与えられる。
n
h
1
.
.
.
h
n
入力は以下の制約を満たす
1 ≤
n
≤ 500
1 ≤
h
i
≤ 10,000,000
Output
答えの値を１行に出力せよ
Sample Input 1
2
5
5
Sample Output 1
11
Sample Input 2
10
10
10
10
10
10
10
10
10
10
10
Sample Output 2
93
Sample Input 3
5
1
2
3
4
5
Sample Output 3
15

Submitted solutions:

code_snippet: #include<bits/stdc++.h>
#define rep(i, n) for(ll i = 0; i < (ll)(n); i++)

using namespace std;
using ll = long long;

const int MAX_N = 1e7+10;
int main(){
	int N; cin >> N;
	vector<int> H(N);
	rep(i, N) cin >> H[i];

	vector<ll> num(MAX_N);
	vector<ll> values(MAX_N);
	values[0] = 1;
	for(int i = 1; i < MAX_N; i++) values[i] = i * 4ll;
	rep(i, N) num[H[i]]++;

	ll people = N;
	ll ans = 0;
	rep(i, MAX_N){
		if(people <= 0) break;
		ans += min(values[i], people);
		people -= num[i];
	}
	cout << ans << endl;
}
accuracy: 1
time_ms: 10
memory_kb: 159380
final_rank: 11

code_snippet: #include<bits/stdc++.h>
#define rep(i,n)for(int i=0;i<(n);i++)
using namespace std;
typedef long long ll;

int sum[10000001];
int main(){
	int n;scanf("%d",&n);
	rep(i,n){
		int h;scanf("%d",&h);
		sum[h]++;
	}
	for(int i=9999999;i>=0;i--)sum[i]+=sum[i+1];
	ll cnt=1;
	int a=4;
	for(int i=1;i<=10000000;i++){
		cnt+=min(a,sum[i]);
		a+=4;
	}
	printf("%lld\n",cnt);
}
accuracy: 1
time_ms: 40
memory_kb: 42284
final_rank: 7

code_snippet: #include<bits/stdc++.h>
#define rep(i,n)for(int i=0;i<(n);i++)
using namespace std;

int sum[10000001];
int main(){
	int n;scanf("%d",&n);
	rep(i,n){
		int h;scanf("%d",&h);
		sum[h]++;
	}
	for(int i=9999999;i>=0;i--)sum[i]+=sum[i+1];
	int cnt=1;
	int a=4;
	for(int i=1;i<=10000000;i++){
		cnt+=min(a,sum[i]);
		a+=4;
	}
	printf("%d\n",cnt);
}
accuracy: 0.9615384615384616
time_ms: 40
memory_kb: 42284
final_rank: 14

code_snippet: #include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<map>
#include<set>
#include<utility>
#include<cmath>
#include<cstring>
#include<queue>
#include<cstdio>
#include<sstream>
#define loop(i,a,b) for(int i=a;i<b;i++) 
#define rep(i,a) loop(i,0,a)
#define pb push_back
#define mp make_pair
#define all(in) in.begin(),in.end()
const double PI=acos(-1);
const double EPS=1e-10;
const int inf=1e9;
using namespace std;
typedef long long ll;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef pair<int,int> pii;
int in[10000010]={0};
int main(){
	int n;
	cin>>n;
	in[0]=n;
	rep(i,n){
		int a;cin>>a;
		in[a+1]--;
	}
	rep(i,10000010)in[i+1]+=in[i];
	ll out=1;
	loop(i,1,10000010){
		if(in[i]==0)break;
		out+=min(4*i,in[i]);
	}
	cout<<out<<endl;
}
accuracy: 1
time_ms: 10
memory_kb: 40220
final_rank: 1

code_snippet: #include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<map>
#include<set>
#include<utility>
#include<cmath>
#include<cstring>
#include<queue>
#include<cstdio>
#include<sstream>
#define loop(i,a,b) for(int i=a;i<b;i++) 
#define rep(i,a) loop(i,0,a)
#define pb push_back
#define mp make_pair
#define all(in) in.begin(),in.end()
const double PI=acos(-1);
const double EPS=1e-10;
const int inf=1e9;
using namespace std;
typedef long long ll;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef pair<int,int> pii;
int in[10000010]={0};
int main(){
	int n;
	cin>>n;
	in[0]=n;
	rep(i,n){
		int a;cin>>a;
		in[a+1]--;
	}
	rep(i,10000010)in[i+1]+=in[i];
	int out=1;
	loop(i,1,10000010){
		if(in[i]==0)break;
		out+=min(4*i,in[i]);
	}
	cout<<out<<endl;
}
accuracy: 0.9615384615384616
time_ms: 10
memory_kb: 40224
final_rank: 13

code_snippet: #include <iostream>
#include <algorithm>
#include <vector>
#include <math.h>
#include <utility>
#include <queue>

#define MAX 500

using namespace std;

int tentuki(int n ,int m){
    int p;
    if (n>=m) {
        p = n - m;
    }else{
        p =0;
    }
    return p;
}


int main(){
    int n;
    vector<int> h(n,0);
    cin >> n;
    for (int i=0; i<n; i++) {
        int p;
        cin >>p ;
        h.push_back(p);
    }
    sort(h.begin(),h.end(), greater<int>());
    int stock = n;
    long long area=1;
    int huka=0;
    int flag=0;
    while (1) {
        int per;
        if (stock <= 3) {
            per = stock;
        }else{
            per = 4;
        }
        for (int i=0; i<per; i++) {
            area+=tentuki(h[flag++],huka);
        }
        huka++;
        stock-=4;
        if (stock <= 0) {
            break;
        }
    }
    cout << area << endl;
}
accuracy: 1
time_ms: 60
memory_kb: 35656
final_rank: 9

code_snippet: #include <iostream>
#include <algorithm>
#include <vector>
#include <math.h>
#include <utility>
#include <queue>

#define MAX 500

using namespace std;

int tentuki(int n ,int m){
    int p;
    if (n>=m) {
        p = n - m;
    }else{
        p =0;
    }
    return p;
}


int main(){
    int n;
    vector<int> h(n,0);
    cin >> n;
    for (int i=0; i<n; i++) {
        int p;
        cin >>p ;
        h.push_back(p);
    }
    sort(h.begin(),h.end(), greater<int>());
    int stock = n;
    int area=1;
    int huka=0;
    int flag=0;
    while (1) {
        int per;
        if (stock <= 3) {
            per = stock;
        }else{
            per = 4;
        }
        for (int i=0; i<per; i++) {
            area+=tentuki(h[flag++],huka);
        }
        huka++;
        stock-=4;
        if (stock <= 0) {
            break;
        }
    }
    cout << area << endl;
}
accuracy: 0.9615384615384616
time_ms: 60
memory_kb: 35656
final_rank: 15

code_snippet: #include <iostream>
#include <algorithm>
#include <vector>
#include <math.h>
#include <utility>
#include <queue>

#define MAX 500

using namespace std;


int main(){
    int n;
    vector<int> h(n,0);
    cin >> n;
    for (int i=0; i<n; i++) {
        int p;
        cin >>p ;
        h.push_back(p);
    }
    sort(h.begin(),h.end(), greater<int>());
    int stock = n;
    long long int area=1;
    long long int huka=0;
    int flag=0;
    while (1) {
        int per;
        if (stock <= 3) {
            per = stock;
        }else{
            per = 4;
        }
        for (int i=0; i<per; i++) {
            area+=h[flag++]-huka;
        }
        huka++;
        stock-=4;
        if (stock <= 0) {
            break;
        }
    }
    cout << area << endl;
}
accuracy: 0.11538461538461539
time_ms: 50
memory_kb: 35132
final_rank: 16

code_snippet: #include <iostream>
#include <algorithm>
#include <vector>
#include <math.h>
#include <utility>
#include <queue>

#define MAX 500

using namespace std;


int main(){
    int n;
    vector<int> h(n,0);
    cin >> n;
    for (int i=0; i<n; i++) {
        int p;
        cin >>p ;
        h.push_back(p);
    }
    sort(h.begin(),h.end(), greater<int>());
    int stock = n;
    int area=1;
    int huka=0;
    int flag=0;
    while (1) {
        int per;
        if (stock <= 3) {
            per = stock;
        }else{
            per = 4;
        }
        for (int i=0; i<per; i++) {
            area+=h[flag++]-huka;
        }
        huka++;
        stock-=4;
        if (stock <= 0) {
            break;
        }
    }
    cout << area << endl;
}
accuracy: 0.11538461538461539
time_ms: 50
memory_kb: 35392
final_rank: 17

code_snippet: #include <iostream>
using namespace std;
int n,a;
int con[10001000];
int main() {
    cin >> n; for (int i = 0; i < n; ++i) cin >> a, con[a]++;
    for (int i = 10000001; i >= 0; --i) con[i] += con[i+1];
    long long res = 0;
    for (int i = 0; i <= 10000000; ++i) res += min(i*4, con[i]);
    cout << res+1 << endl;
    return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 40220
final_rank: 3

code_snippet: #include <iostream>
using namespace std;
int n,a;
int con[10001000];
int main() {
    cin >> n;
    for (int i = 0; i < n; ++i) cin >> a, con[a]++;
    for (int i = 10000001; i >= 0; --i) con[i] += con[i+1];
    long long res = 0;
    for (int i = 0; i <= 10000000; ++i) res += min(i*4, con[i]);
    cout << res+1 << endl;
    return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 40224
final_rank: 4

code_snippet: #include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <bitset>
#include <numeric>
#include <utility>
#include <iomanip>
#include <algorithm>
#include <functional>
using namespace std;

typedef long long ll;
typedef vector<int> vint;
typedef vector<long long> vll;
typedef pair<int,int> pint;
typedef pair<long long, long long> pll;

#define MP make_pair
#define PB push_back
#define ALL(s) (s).begin(),(s).end()
#define EACH(i, s) for (__typeof__((s).begin()) i = (s).begin(); i != (s).end(); ++i)
#define COUT(x) cout << #x << " = " << (x) << " (L" << __LINE__ << ")" << endl

template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
template<class T1, class T2> ostream& operator << (ostream &s, pair<T1,T2> P) 
{ return s << '<' << P.first << ", " << P.second << '>'; }
template<class T> ostream& operator << (ostream &s, vector<T> P) 
{ for (int i = 0; i < P.size(); ++i) { if (i > 0) { s << " "; } s << P[i]; } return s; }
template<class T1, class T2> ostream& operator << (ostream &s, map<T1,T2> P) 
{ EACH(it, P) { s << "<" << it->first << "->" << it->second << "> "; } return s; }



int n;
int con[10001000];

int main() {
    while (cin >> n) {
        memset(con, 0, sizeof(con));
        for (int i = 0; i < n; ++i) {
            int a; cin >> a; con[a]++;
        }
        for (int i = 10000001; i >= 0; --i) con[i] += con[i+1];
        long long res = 0;
        for (int i = 0; i <= 10000000; ++i) res += min(i*4, con[i]);
        cout << res+1 << endl;
    }
    return 0;
}
accuracy: 1
time_ms: 40
memory_kb: 40232
final_rank: 6

code_snippet: #include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <numeric>
#include <cctype>
#include <tuple>

#ifdef _MSC_VER
#include <agents.h>
#endif

#define FOR(i, a, b) for(int i = (a); i < (int)(b); ++i)
#define rep(i, n) FOR(i, 0, n)
#define ALL(v) v.begin(), v.end()
#define REV(v) v.rbegin(), v.rend()
#define MEMSET(v, s) memset(v, s, sizeof(v))
#define X first
#define Y second

using namespace std;

typedef long long ll;
typedef pair<int, int> P;

const int N = 1e7 + 10;
int dat[N];

int main(){
	int n;
	cin >> n;
	rep(i, n){
		int h;
		cin >> h;
		++dat[1], --dat[h+1];
	}

	rep(i, N) dat[i + 1] += dat[i];

	ll ans = 1;
	FOR(i, 1, N){
		ans += min(i * 4, dat[i]);
	}
	cout << ans << endl;



	return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 40216
final_rank: 2

code_snippet: #include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <numeric>
#include <cctype>
#include <tuple>

#ifdef _MSC_VER
#include <agents.h>
#endif

#define FOR(i, a, b) for(int i = (a); i < (int)(b); ++i)
#define rep(i, n) FOR(i, 0, n)
#define ALL(v) v.begin(), v.end()
#define REV(v) v.rbegin(), v.rend()
#define MEMSET(v, s) memset(v, s, sizeof(v))
#define X first
#define Y second

using namespace std;

typedef long long ll;
typedef pair<int, int> P;

const int N = 1e7 + 10;
int dat[N];

void add(int i, int a){
	for (int x = i; x < N; x += x&-x) dat[x] += a;
}

int sum(int i){
	int res = 0;
	for (int x = i; x > 0; x -= x&-x) res += dat[x];
	return res;
}

int main(){
	int n;
	cin >> n;
	rep(i, n){
		int h;
		cin >> h;
		add(1, 1), add(h+1, -1);
	}

	ll ans = 1;
	FOR(i, 1, N){
		ans += min(i * 4, sum(i));
	}
	cout << ans << endl;



	return 0;
}
accuracy: 1
time_ms: 110
memory_kb: 38060
final_rank: 12

code_snippet: #include <cstdio>
long long int n,m;
long long int t[11111111];
int main(void){
  scanf("%lld",&n);
  t[0] = n;
  for(int i = 0; i < n; i++){
    long long int h;
    scanf("%lld",&h);
    t[h] -= 1;
  }

  long long int res = 1;
  m = 4;
  for(int i = 0; t[i]; i++){
    res += (m>t[i])?t[i]:m;
    m += 4;
    t[i+1] += t[i];
  }
  printf("%lld\n",res);
}
accuracy: 1
time_ms: 10
memory_kb: 80888
final_rank: 5

code_snippet: #include<stdio.h>
long long d[10000001];
int main(){
	int n,i,h;
	for(i=0;i<=10000000;i++)d[i]=0;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&h);
		d[h-1]++;
	}
	long long ans=0;
	for(i=9999999;i>=0;i--){
		d[i]+=d[i+1];
		if(d[i]>4*(i+1))d[i]=4*(i+1);
		ans+=d[i];
	}
	printf("%lld\n",ans+1);
	return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 79148
final_rank: 8

code_snippet: #include <cstdio>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <climits>
#include <cfloat>
using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> h(n);
    for(int i=0; i<n; ++i)
        cin >> h[i];

    long long ret = 1;
    int k = 0;
    for(int i=1; i<=100000000; ++i){
        ret += min(4 * i, n - k);
        while(k < n && h[k] == i)
            ++ k;
    }

    cout << ret << endl;

    return 0;
}
accuracy: 1
time_ms: 100
memory_kb: 1192
final_rank: 10