Codeforces 992C Nastya and a Wardrobe (思维)
<题目链接>
题目大意:
你开始有X个裙子 你有K+1次增长机会 前K次会100%的增长一倍 但是增长后有50%的机会会减少一个
给你X,K(0<=X,K<=1e18), 问你最后裙子数量的期望值是多少(答案 mod 1e9+7)
解题分析:
一看到X,K的范围这么大,就应该想到是要推公式,找规律的题。本题的公式很好推,直接按照题意模拟即可。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 const int mod = 1e9+7; 7 typedef long long ll; 8 9 ll pow(ll x,ll y){ 10 ll ans=1; 11 while(y){ 12 if(y & 1) ans = (ans*x)%mod; 13 y >>= 1; 14 x = (x*x)%mod; 15 } 16 return ans%mod; 17 } 18 19 int main(){ 20 ll x,k; 21 while(scanf("%lld%lld",&x,&k)!=EOF){ 22 if(x == 0){ puts("0");continue; } 23 x %= mod; //注意这里需要先将x%一下,因为后面乘的过程中可能会爆long long 24 ll ans = ((pow(2,k+1)*x)%mod - pow(2,k) + 1 + mod ) % mod; 25 printf("%lld\n",ans); 26 } 27 }
2019-01-17
作者:is_ok
出处:http://www.cnblogs.com/00isok/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。