1.貪欲なアルゴリズムの考え方
貪欲アルゴリズムとは、問題を解決する際に、全体の最適性を考慮せず、常にその時点で最善の選択を行うアルゴリズムです。
2. 貪欲アルゴリズムを使用した問題解決戦略
基本的な考え方は、問題の初期解から始めて段階的に進めることであり、最適化手段に従って、各ステップで局所的な最適解が確実に得られるようにする必要があります。貪欲アルゴリズムの鍵は、すべての問題に対して全体的に最適な解決策を得ることではなく、貪欲戦略の選択にあります。次のデータと部分最適解が結合され、それが実行可能な解でなくなった場合、すべてのデータが列挙されるまで、データは部分解に追加されません。さもなければ、アルゴリズムを追加できなくなり、アルゴリズムが停止します。 。」
典型的な 3 つの質問
五次元
ゼロ次元は点であり、その点は移動して線を形成します。
1 つの次元は線であり、その線は移動して面を形成します。
2 次元は表面であり、表面は物体内に移動します。
三次元は身体であり、身体の動きが歴史を形成します。
四次元は歴史であり、歴史が動く????
今、人類は五次元を理解しようとしています。
そしてシャオドゥは今、五次元の賢者になっています。ある日、シャオドゥは、多くの人間の科学者が 5 次元を理解しようとしていることを発見しました。人間は 4 次元の生き物です。5 次元を理解すれば、おそらく 5 次元に到達するでしょう。これは明らかにシャオドゥが望んでいないことです。 (結局のところ、人口の問題はどこにでもあります...) そこでシャオドゥは、彼らができるだけ早く 5 次元を理解できることを望んでいます。そして、これらの科学者の IQ は異なるため、理解速度 Vi も異なり、理解し始める時点 Si も異なります。理解速度 Vi は、単位時間あたりに得られる理解の Vi 単位として記述されます。つまり、Si +1 の時点で、科学者は初めて Vi の理解に貢献します。理解の総数が m を超えたときに理解される 5 次元を定義します。シャオドゥはより高い次元を持っているため、タイムパラドックスを利用して人間に大きな打撃を与えることができます。シャオドゥはいつでも科学者を消滅させることができるため、彼のその後の理解は続かず、人間は彼を覚えていないため、彼のこれまでの貢献は消えるだろう。シャオドゥの能力には限界があるため、シャオドゥは一時的なパラドックスを一度しか使用できません。
次に、人類が五次元をできるだけ遅く理解する最も早い時点を見つけてください。
時点は最初は 00 ですが、明らかに、時点 00 では科学者は貢献できません。
フォーマット
入力形式:
最初の行は整数 n と整数 m を与え、理解の総数が m を超える場合、5 次元を理解する科学者が n 人いることを示します; 2 行目から n+1 行目: 各行には 2 つの整数 Si と Vi があります
。
データの 100% の場合: 1≤n≤10^5、m≤2*10^9;
データの 100% の場合: 00≤Si ≤2*10^9、0≤Vi ≤10^3。出力フォーマット:
整数 T を含む行は、人間が 5 次元を理解する最も早い時点、可能な限り遅い時点を表します。
人間が 5 次元を決して理解できない場合は、-1 を出力します。
答え
#include<bits/stdc++.h>
using namespace std;
long long s[100000],v[100000],n,m;
bool check(int t){
long long sum=0,maxn=-1;
for(int i=1;i<=n;i++){
if(t-s[i]<=0) continue;
sum+=(t-s[i])*v[i];
maxn=max(maxn,(t-s[i])*v[i]);
}
return sum-maxn>m;
}
int main( )
{
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>s[i]>>v[i];
}
int l=0,r=999999999;
while(l<r){
int mid=(l+r)/2;
if(check(mid)) r=mid;
else l=mid+1;
}
if(check(1)) cout<<l;
else cout<<-1;
return 0;
}
結果: