結果
| 問題 |
No.77 レンガのピラミッド
|
| コンテスト | |
| ユーザー |
srup٩(๑`н´๑)۶
|
| 提出日時 | 2016-10-22 22:04:26 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,403 bytes |
| コンパイル時間 | 547 ms |
| コンパイル使用メモリ | 62,136 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-11-23 17:43:02 |
| 合計ジャッジ時間 | 1,498 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 14 WA * 6 |
ソースコード
#include <iostream>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
#define rep(i,n) for(int i=0;i<(n);i++)
const int INF = 1e9;
int n, a[110];
int main(void){
cin >> n;
int sum = 0;
rep(i, n){
cin >> a[i];
sum += a[i];
}
int ans = INF;
for (int i = 1; i <= 100; i += 2)//何列ピラミッドにするか
{
int tarinai = 0, amari = 0;
int aim = 0;
//左側 + 真ん中
for (int l = 0; l < i / 2 + 1; ++l)
{
aim++;
if(l < n){
if(a[l] < aim){
tarinai += aim - a[l];
}else{
amari += a[l] - aim;
}
}else{
tarinai += aim;
}
}
aim = 0;
//右側
for (int r = i - 1; r >= i / 2 + 1; --r)
{
aim++;
if(r < n){
if(a[r] < aim){
tarinai += aim - a[r];
}else{
amari += a[r] - aim;
}
}else{
tarinai += aim;
}
}
//使わない列
for (int j = i; j < n; ++j)
{
amari += a[j];
}
// printf("%d amari %d tarinai %d\n", i, amari, tarinai);
if(amari >= tarinai){
//足りないところに余りから追加するのに、足りない分だけのコスト tarinai
//余りを足りないところに追加して、残った分を捨て置き場に移動するコスト amari - tariani
ans = min(ans, tarinai + amari - tarinai);
// ans = min(ans, amari);
}
}
printf("%d\n", ans);
return 0;
}
srup٩(๑`н´๑)۶