公式
B - 細胞の培養 / Cell Cultivation 解説
by
B - 細胞の培養 / Cell Cultivation 解説
by
physics0523
一度細胞の個数が \(T\) を超えてしまえば、もう細胞を \(T\) 個にすることはできません。
よって、以下のシミュレーションが成立します。
- \(S \le T\) が満たされるうちは、 \(i=0,1,\dots,K\) について、以下を繰り返す。
- \(S=T\) であれば増殖 \(i\) 回でちょうど \(T\) 個にできていることが分かる。
- \(i \neq K\) であれば、 \(S\) を \(2\) 倍する (増殖を一度行う) 。
\(K \le 100\) なのでこのシミュレーションは機能しますし、仮に \(K \le 10^9\) のような制約であっても \(1\) 個の細胞を \(60\) 回増殖させれば \(10^{18}\) 個を超えてしまうため、操作の回数が高々 \(60\) 回で十分であることが分かればこの問題に正解できます。
\(S > T\) となった状態でシミュレーションを続行してしまうと、オーバーフローしてしまう可能性があるのでご注意ください。
実装例 (C++):
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(){
ll S,T,K;
cin >> S >> T >> K;
for(ll i=0;i<=K && S<=T;i++){
if(S==T){
cout << i << "\n";
return 0;
}
S*=2;
}
cout << "-1\n";
return 0;
}
投稿日時:
最終更新:
