結果
| 問題 |
No.77 レンガのピラミッド
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-09-25 10:21:08 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,592 bytes |
| コンパイル時間 | 972 ms |
| コンパイル使用メモリ | 68,528 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-11-18 11:21:38 |
| 合計ジャッジ時間 | 1,888 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 2 WA * 18 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
vector<vector<int>> vv;
void calc(int n){
if(n%2==0) n-=1;
for(int i=1;i<=n;i+=2){
vector<int> v;
if(i==1){
v.push_back(1);
} else if(i==3){
v.push_back(1);
v.push_back(2);
v.push_back(1);
} else {
for(int j=1;j<=i/2;++j){
v.push_back(j);
}
v.push_back(i/2+1);
for(int j=i/2;j>=1;--j){
v.push_back(j);
}
}
vv.push_back(v);
}
}
int main(){
int N; cin>>N;
vector<int> v(N);
int sum_block=0;
for(int i=0;i<N;++i){
cin>>v[i];
sum_block+=v[i];
}
calc(N);
int cnt=INT_MAX;
for(int i=0;i<vv.size();++i){
int column=vv[i].size();
for(int j=0;j<v.size()-column+1;++j){
for(int k=j;k<j+column;++k){
int sum_block2=0;
int stock_block=0;
int supply_block=0;
int move_block=0;
for(int l=j;l<=k;++l){
sum_block2+=v[l];
int diff_block=v[l]-vv[i][l-j];
if(diff_block>=0) stock_block+=diff_block,move_block+=diff_block;
else if(diff_block<0 && stock_block>=diff_block*-1) stock_block-=diff_block;
else if(diff_block<0 && stock_block<diff_block*-1) supply_block+=(diff_block*-1-stock_block),move_block+=(diff_block*-1-stock_block),stock_block=0;
}
if(supply_block>(sum_block-sum_block2)) move_block=INT_MAX;
else move_block+=(sum_block-sum_block2-supply_block);
if(move_block<cnt) cnt=move_block;
}
}
}
cout<<cnt<<endl;
return 0;
}