Wannafly挑战赛18 B - 随机数
Posted cjlhy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wannafly挑战赛18 B - 随机数相关的知识,希望对你有一定的参考价值。
思路:化简公式,Pn 表示 进行n 次操作,有奇数次1的概率
Pn = (1 - x) * Pn - 1 + x * (1 - Pn - 1)
得通项公式 Pn = (1 - (1 - 2 * x) ^ n) / 2
n 很大 ,但是模数是素数,可以用费马小定理优化。
#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int, int> using namespace std; const int N = 1e6 + 7; const int M = 1e6 + 7; const int inf = 0x3f3f3f3f; const LL INF = 0x3f3f3f3f3f3f3f3f; const int mod = 1e9 +7; LL fastPow(LL a, LL b) { LL ans = 1; while(b) { if(b & 1) ans = ans * a % mod; a = a * a % mod; b >>= 1; } return ans; } LL a, n; char s[N]; int main(){ scanf("%lld%s", &a, s); int len = strlen(s); for(int i = 0; i < len; i++) { n = n * 10 % (mod - 1); n += s[i] - ‘0‘; if(n >= mod - 1) n -= mod - 1; } a = a * fastPow(10000ll, mod - 2) % mod; a = 1 - 2 * a; a = ((a % mod) + mod) % mod; a = fastPow(a, n); a = 1 - a; if(a < 0) a += mod; a = a * fastPow(2, mod - 2) % mod; printf("%lld ", a); return 0; } /* */
以上是关于Wannafly挑战赛18 B - 随机数的主要内容,如果未能解决你的问题,请参考以下文章