题意:给定你n个连续的问题和m个问题回答正确,然后有一个k的计数板,如果正确的问题到达k 计数板清0分数加倍,如果回答错误的话 计数板清零,不加分数,问你分数最小值为多少
解题思路:比赛时没有看出这题水题的本质,对情况讨论的也不明显,所以现在才过,解题思路就是把不能回答错误而清零的那一部分放在前面,算分既可
解题代码:

1 // Fie Name: c.c 2 // Author: darkdream 3 // Created Time: 2013年08月17日 星期六 00时47分02秒 4 5 #include<stdio.h> 6 #include<string.h> 7 #include<stdlib.h> 8 #include<time.h> 9 #include<math.h> 10 #include<ctype.h> 11 #define MOD 1000000009 12 long long Pow(long long k ){ 13 14 if(k == 1 ) 15 return 2; 16 else{ 17 long long t = Pow(k/2) % MOD; 18 if(k % 2 == 0 ) 19 return ( t*t ) % MOD; 20 else return (t * t) % MOD* 2 % MOD; 21 } 22 } 23 24 int main(){ 25 26 //freopen("/home/plac/problem/input.txt","r",stdin); 27 //freopen("/home/plac/problem/output.txt","w",stdout); 28 long long n, m , k ; 29 scanf("%I64d %I64d %I64d",&n,&m,&k); 30 int t = (m-(n-m)*(k-1))/k; 31 if(t < 0) 32 printf("%I64d",m); 33 else { 34 long long ans = ((Pow(t+1)-2)*k + m - t*k ) % MOD; 35 if(ans < 0 ) 36 ans = MOD +ans; 37 printf("%I64d ",ans); 38 } 39 return 0 ; 40 }