zoukankan      html  css  js  c++  java
  • CodeForces 992C Nastya and a Wardrobe(规律、快速幂)

    http://codeforces.com/problemset/problem/992/C

     

    题意:

    给你两个数x,k,k代表有k+1个月,x每个月可以增长一倍,增长后的下一个月开始时x有50%几率减1,增长k+1个月后结果是每种情况的总和除以种数。

    题目要求的是增长k+1个月后的结果。

    我们根据第三个样例可以推出他的增长过程

        3

      6    5

    12  11  10  9

    |      |     |   |

    24    22   20  18

    从这个推导我们容易得出最后得到的每种情况构成一个等差数列,公差为2

    结果是:(2*n-1)*2k+1

    注意特判0的情况,0的时候答案是0,直接输出

    另外求2的次方的时候用快速幂,注意取余

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 #include <string>
     5 #include <math.h>
     6 #include <algorithm>
     7 #include <vector>
     8 #include <stack>
     9 #include <queue>
    10 #include <set>
    11 #include <map>
    12 #include <sstream>
    13 const int INF=0x3f3f3f3f;
    14 typedef long long LL;
    15 const int mod=1e9+7;
    16 //const double PI=acos(-1);
    17 #define Bug cout<<"---------------------"<<endl
    18 const int maxm=1e6+10;
    19 const int maxn=1e5+10;
    20 using namespace std;
    21 
    22 LL POW(LL a,LL b )
    23 {
    24     LL ans = 1;
    25     a = a % mod;
    26     while(b) 
    27     {
    28         if( b % 2 == 1 )
    29             ans = ( ans * a ) % mod;
    30         a = ( a * a ) % mod;
    31         b /= 2;
    32     }
    33     return ans;
    34 }
    35 
    36 int main()
    37 {
    38     LL n,k;
    39     scanf("%lld %lld",&n,&k);
    40     LL ans=0;
    41     if(n!=0)
    42     {
    43         n=n%mod;
    44         ans=(((2*n-1)*POW(2,k)+mod)%mod+1+mod)%mod;
    45     }
    46     printf("%d
    ",ans);
    47     return 0;
    48 } 
  • 相关阅读:
    CPU上下文的切换
    linux 零拷贝
    整型的长度
    What is the Memory Model in C++11
    leetcode刷题笔记九十二题 反转链表II
    leetcode刷题笔记九十一题 解码方法
    leetcode刷题笔记九十题 子集II
    leetcode刷题笔记八十九题 格雷编码
    leetcode刷题笔记八十八题 合并两个有序数组
    leetcode刷题笔记八十七题 扰乱字符串
  • 原文地址:https://www.cnblogs.com/jiamian/p/11776382.html
Copyright © 2011-2022 走看看