Wannafly挑战赛18B 随机数
Wannafly挑战赛18B 随机数
设\(f_i\)表示生成\(i\)个数有奇数个1的概率。
那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{i-1}+p\)
简化一下,设\(A=1-2p,B=p\)则\(f_i=A\times f_{i-1}+B\)
大力拆。。。\(f_n=Af_{n-1}+B=A(Af_{n-2}+B)+B=A(A(Af_{n-3}+B)+B)+B...\)
最后\(f_n=\underbrace{(A(A(A(\cdots(A}_{\text{n个}}f_0+B)+B)\cdots +B)+B=B(1+A+A^2\cdots A^{n-2}+A^{n-1})\)
等比数列求和即可
最后\(A^n\)的\(n\)可以降幂变成\(A^{n\text{ mod }(P-1)}\)
注意\(A=1\)的特判
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
#define mod 1000000007
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
ll a,n,len,A,B,s;
char N[1000010];
il ll pow(ll x,ll y){
ll ret=1;
while(y){
if(y&1)ret=ret*x%mod;
x=x*x%mod;y>>=1;
}
return ret;
}
il ll inv(ll x){
ll ret=1,y=mod-2;
while(y){
if(y&1)ret=ret*x%mod;
x=x*x%mod;y>>=1;
}
return ret;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("129b.in","r",stdin);
freopen("129b.out","w",stdout);
#endif
a=gi();
scanf("%s",N+1);len=strlen(N+1);
if(a==5000)s=mod;
else s=mod-1;
for(int i=1;i<=len;++i)n=(n*10+N[i]-'0')%s;
B=a*inv(10000)%mod,A=(mod+mod+1-B-B)%mod;
if(a==5000)printf("%lld\n",(A*B%mod*n%mod+B)%mod);
else printf("%lld\n",B*(mod+pow(A,n)-1)%mod*inv(A-1)%mod);
return 0;
}
Wannafly挑战赛18B 随机数的更多相关文章
- Wannafly挑战赛25游记
Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...
- Wannafly挑战赛27
Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...
- Wannafly 挑战赛 19 参考题解
这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...
- Wannafly挑战赛21A
题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...
- Wannafly挑战赛24游记
Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...
- Wannafly挑战赛25C 期望操作数
Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...
- Wannafly挑战赛22游记
Wannafly挑战赛22游记 幸运的人都是相似的,不幸的人各有各的不幸. --题记 A-计数器 题目大意: 有一个计数器,计数器的初始值为\(0\),每次操作你可以把计数器的值加上\(a_1,a_2 ...
- 【Wannafly挑战赛4】F 线路规划 倍增+Kruskal+归并
[Wannafly挑战赛4]F 线路规划 题目描述 Q国的监察院是一个神秘的组织.这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人.监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只 ...
- Wannafly挑战赛18 E 极差(线段树、单调栈)
Wannafly挑战赛18 E 极差 题意 给出三个长度为n的正整数序列,一个区间[L,R]的价值定义为:三个序列中,这个区间的极差(最大值与最小值之差)的乘积. 求所有区间的价值之和.答案对\(2^ ...
随机推荐
- form插件ajaxForm和ajaxSubmit方法传递对象参数说明
form插件的ajaxForm和ajaxSubmit方法的Options对象还可以用来将值传递给jQuery的$.ajax方法.如果你熟悉$.ajax所支持的options,你可以利用它们来将Opti ...
- python操作Exchange邮箱实例(-)
需求很简单,就是实现按公司域名及服务器模拟exchange发送邮件,主要是协助自动化测试.主要功能:收件人/抄送/正文html/附件 本实例基于:python2.7.11 exchangelib1.1 ...
- PHP设计模式系列 - 工厂模式
工厂模式 提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤. 工厂模式 实际上就是建立一个统一的类实例化的函数接口.统一调用,统一控制. 工厂模式是php项目开发中,最常用的设计 ...
- .NET Core 控制台项目中的Nuget打包类库及引用
由于使用的是MAC版本的VSCode,所以全部是通过dotnet命令来完成的. 1.dotnet new lib 创建类库项目: 2.编辑项目根目录下的.csproj文件,添加版本号(建议): < ...
- Python的unittest框架的断言总结
常用的断言方法如下: assertFalse:为假时返回True:self.assertFalse(表达式,“表达式为true时打印的message”) assertTrue:为真时返回True:se ...
- 4-5 R语言函数 split
#split根据因子或因子列表将 向量或其他对象分组 #通常与lapply一起使用 #split(参数):split(向量/列表/数据框,因子/因子列表) > x <- c(rnorm(5 ...
- socket.io+angular.js+express.js做个聊天应用(二)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/www19940501a/article/details/27585321 接着上一篇 我用的开发工具 ...
- 写了一个web使用向导的小插件
运行效果: 引入插件: <link rel="stylesheet" href="ez-guide.css"> <script src=&qu ...
- elasticsearch5.5安装
beat -------- kafka -------- logstash---------------elasticsearch--------------kibana beat配置文件 [roo ...
- tomcat服务器宕机解决方案
报错信息: java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:1 ...