質問E:最大水容量

わかりやすい見出しストレートタンクがあり、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;
   }
公開された12元の記事 ウォンの賞賛0 ビュー121

おすすめ

転載: blog.csdn.net/weixin_45987032/article/details/104524945
おすすめ