0w1

CFR 198 1A. About Bacteria ( Math )

Problem - A - Codeforces
f( x ) = k * x + b
f^n( 1 ) ≤ f^a( t ) となるような最小な aを求める。
始めは matrix fast power で二分探査しようと頑張ってみたがオーバーフローが出るみたいで失敗した。
ちゃんと考えると、単調増加関数なので両方に f^( -a )() をかけたら、条件が f^( n - a ) ≤ t になる。それなら簡単だね。

#include <bits/stdc++.h>
using namespace std;
const int MAXV = 1e6 + 6;
typedef long long ll;

int k, b, n, t;

int main(){
    scanf("%d%d%d%d", &k, &b, &n, &t);
    ll cur = 1; int cnt = 0;
    while( cur <= t )
        cur = cur * k + b,
        ++cnt;
    printf("%d\n", max( 0, n - cnt + 1 ));
    return 0;
}