博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P4548 [CTSC2006]歌唱王国(概率生成函数)
阅读量:7207 次
发布时间:2019-06-29

本文共 1560 字,大约阅读时间需要 5 分钟。

题面

给定一个长度为\(L\)的序列\(A\)。然后每次掷一个标有\(1\)\(m\)的公平骰子并将其上的数字加入到初始为空的序列\(B\)的末尾,如果序列B中已经出现了给定序列\(A\),即\(A\)\(B\)的子串,则停止,

求序列\(B\)的期望长度。\(L ≤ 10^5\)

题解

不知道概率生成函数是什么的可以看看,题解也在里面了

//minamoto#include
#define R register#define fp(i,a,b) for(R int i=(a),I=(b)+1;i
I;--i)#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)using namespace std;char buf[1<<21],*p1=buf,*p2=buf;inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}int read(){ R int res,f=1;R char ch; while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1); for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0'); return res*f;}char sr[1<<21],z[20];int C=-1,Z=0;inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}void print(R int x){ if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x; while(z[++Z]=x%10+48,x/=10); while(sr[++C]=z[Z],--Z);sr[++C]='\n';}const int N=1e5+5,P=1e4;inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}int bin[N],kmp[N],a[N],n,p,res,pos;int main(){// freopen("testdata.in","r",stdin); p=read(),bin[0]=1;fp(i,1,1e5)bin[i]=mul(bin[i-1],p); for(int T=read();T;--T){ n=read();fp(i,1,n)a[i]=read(); kmp[0]=kmp[1]=0; for(R int i=2,j=0;i<=n;++i){ while(j&&a[j+1]!=a[i])j=kmp[j]; j+=(a[j+1]==a[i]),kmp[i]=j; } pos=n,res=0; while(pos)res=add(res,bin[pos]),pos=kmp[pos]; printf("%04d\n",res); } return 0;}

转载于:https://www.cnblogs.com/bztMinamoto/p/10560884.html

你可能感兴趣的文章
Mysql主键、外键和索引的区别
查看>>
struts基础
查看>>
块状链表 codevs 2333弹飞绵羊
查看>>
(九)jsMath
查看>>
CE_现金模组基本概念(概念)
查看>>
饭后一题
查看>>
Zynq-7000 FreeRTOS(一)系统移植配置
查看>>
[笔记][朝花夕拾][Multisim基础电路范例].第一章 RLC电路,第七、八节 米勒定理...
查看>>
免费论文查重
查看>>
【GPRS】GSM和GPRS模块的应用
查看>>
第一章 Docker简介和基本概念
查看>>
java代码-----实现打印三角形
查看>>
python(4) 小程序-异步加载
查看>>
20190327(练手感)
查看>>
modelform动态显示select标签的对象范围
查看>>
Android ---------- 富文本构建
查看>>
leetcode:Count Primes
查看>>
[转] babel的使用
查看>>
CentOS7.0安装与配置Tomcat-7
查看>>
C# SQL数据访问帮助类
查看>>