わかりやすい見出しストレートタンクがあり、Nバッフルがあります。あなたは、最大水容量を得ることが可能となって、2分割ベゼルから選択する必要があります。
入力
からなる入力サンプルの複数の組からの試験データ
N(2 <= N <整数の最初の入力ライン = 20000)
(0 <= NI <= NI整数N個の入力の第2行 10000)、 バッフルを表します高
サンプルの水容量まで入出力Copy9を取得することができる
。1 2 8 6 8 5 4 3 7
サンプル出力Copy49の
サンプルの分析対象が詳細に見ることができるよう求め
アイデアを:二重ポインタアルゴリズム
最大変数記憶領域を使用して、ポインタを移動させます
1.エラー・コード
#include<bits/stdc++.h>
using namespace std;
int h[11000];
int max(int a,int b){
if(a>b) return a;
return b;
}
int main(){
int n,are;
while(cin>>n){
are=0;
for(int i=0;i<n;i++){
cin>>h[i];
}
int l=0,r=n-1;
while(l<r){
if(h[l]>h[r]){
are=max(are,(r-l)*h[r]);
r--;
}
else{
are=max(are,(r-l)*h[l]);
l++;
}
}
cout<<are<<endl;
}
return 0;
}
エラー:配列のオーバーラン、関数を定義せずに、最大、直接使用することができます
。2.適切なコードを
#include<bits/stdc++.h>
using namespace std;
int h[110000];
int main(){
int n,are;
while(cin>>n){
are=0;
for(int i=0;i<n;i++){
cin>>h[i];
}
int l=0,r=n-1;
while(l<r){
if(h[l]>h[r]){
are=max(are,(r-l)*h[r]);
r--;
}
else{
are=max(are,(r-l)*h[l]);
l++;
}
}
cout<<are<<endl;
}
return 0;
}