cf C. Quiz

时间:2023-03-09 18:04:01
cf C. Quiz

http://codeforces.com/contest/337/problem/C

得到的分数为:(2^1+2^2+...+2^X)*k + m-X*k = (2^(X+1)-2)*k + m-X*k;

x的确定:max(0, m - (n - n mod k) / k * (k-1) - n mod k);

为了得到的分数尽可能少,让满足k次的情况发生在前面。

 #include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
const ll mod=1e9+; ll n,m,k,ans,x; ll pow(ll a,ll b)
{
if(b==) return ;
ll xx=pow(a,b/);
xx=(xx*xx)%mod;
if(b&) xx=(xx*a)%mod;
return xx;
} ll deal1(int n,int m,int k)
{
ll x=max(,m-(n-n%k)/k*(k-)-n%k);
return (mod+m-x*k+(pow(,x+)-)*k)%mod;
}
int main()
{
cin>>n>>m>>k; cout<<deal1(n,m,k)<<endl;
return ;
}