結果
問題 | No.77 レンガのピラミッド |
ユーザー |
![]() |
提出日時 | 2016-02-29 00:41:09 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 883 bytes |
コンパイル時間 | 614 ms |
コンパイル使用メモリ | 66,908 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-24 12:25:52 |
合計ジャッジ時間 | 1,479 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 20 |
ソースコード
#include <cstring> #include <iostream> #include <vector> #include <string> #include <map> #include <queue> #include <algorithm> #include <stack> int N; int A[256]; int total; int diff(int h) { if( total < h * h ) return 100000; int target[256]; for(int i = 0; i < h; ++i) { target[i] = i + 1; } for(int i = h; i < 2 * h - 1; ++i) { target[i] = 2 * h - i - 1; } int res = 0; for(int i = 0; i < 2 * h - 1; ++i) { res += std::max(0, (A[i] - target[i])); } for(int i = 2 * h - 1; i < 128; ++i) { res += A[i]; } if( res < 0 ) res = 100000; //printf("%d : %d\n", h, res); return res; } int main() { std::cin >> N; for(int i = 0; i < N; ++i) std::cin >> A[i]; for(int i = 0; i < N; ++i) total += A[i]; int res = 100000; for(int i = 1; i < 120; ++i) { res = std::min(res, diff(i)); } printf("%d\n", res); return 0; }