cf-373 C Quiz
1192 ワード
タイトルのソース:http://codeforces.com/problemset/problem/337/C
n,m,kをあげます。
全部でnの問題がありますが、mの問題に答えられます。 あなたが連続してk道に答えたら、点数が倍になります。
あなたが得ることができる最小の点数を求めます。
欲が深い 倍の点数をできるだけ前に置く。
それから数学で計算しました。
n,m,kをあげます。
全部でnの問題がありますが、mの問題に答えられます。 あなたが連続してk道に答えたら、点数が倍になります。
あなたが得ることができる最小の点数を求めます。
欲が深い 倍の点数をできるだけ前に置く。
それから数学で計算しました。
#include
#include
#include
#include
#include
#define MOD 1000000009
using namespace std;
#define MAX 1000000
long long n,m,k;
long long exp_mod(long long a,long long n) //
{
long long t;
if(n==0) return 1%MOD;
if(n==1) return a%MOD;
t=exp_mod(a,n/2);
t=t*t%MOD;
if((n&1)==1) t=t*a%MOD;
return t;
}
int main()
{
while(~scanf("%I64d%I64d%I64d",&n,&m,&k))
{
if((n-m)*k>n)
printf("%I64d
",m);
else
{
long long x=n-(n-m)*k; //
long long y=x/k; //
long long sum=(exp_mod(2,y+1)-2+MOD)%MOD; //sum k;
sum=(sum*k)%MOD;
sum=(sum+x%k)%MOD; //
sum=(sum+(n-m)*k-(n-m))%MOD; //
printf("%I64d
",sum);
}
}
}