Description
LCJ报名参加了一个特殊的电视问答节目。这个节目共有
Input
仅一行,三个数
Output
仅一行,一个数,LCJ的最小得分。
Sample Input
5 3 2
Sample Output
3
HINT
思路
每次答题得分的最小值一定是尽可能连续答对
代码
#include <cstdio>
const long long mo=1000000009ll;
long long n,m,k,ans;
long long quickpow(long long a,long long b,long long m)
{
int res=1;
while(b)
{
if(b&1)
{
res=(res*a)%m;
b--;
}
b/=2;
a=(a*a)%m;
}
return res;
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&k);
if(m<=n/k*(k-1))
{
ans=m;
}
else
{
ans=n/k*(k-1);
m-=n/k*(k-1);
if(m<=n%k)
{
ans+=m;
ans%=mo;
}
else
{
ans+=n%k;
ans%=mo;
m-=n%k;
ans+=m;
ans+=(quickpow(2ll,m+1,mo)-2-m)*k;
ans%=mo;
}
}
printf("%lld\n",ans);
return 0;
}