题意:给定你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\n",ans);
38    }
39 return 0 ;
40 }
View Code

 

posted on 2013-08-17 19:12  dark_dream  阅读(301)  评论(0编辑  收藏  举报