命运的X

cjx 生成函数强。

思路

首先,设 \(f_i\) 为添加第 \(i\) 项后满足条件的概率,\(g_i\) 任意添加至第 \(i\) 项的概率。

我们要求的答案:

\[ans=\sum_{i=0} i\times f_i
\]

我们把 \(f\) 放入生成函数中:

\[F=\sum_{i=0} f_i x^i
\]

显然有 \(F(1)=1\)。

对 \(F\) 进行取导。

\[F'=\sum_{i=1} i\times f_ix^{i-1}
\]

发现有 \(ans=F'(1)\)。

把 \(g\) 也用生成函数 \(G\) 表示出来。

考虑加入一个字符,那么有 \(xG=G+F\),即可能匹配,也可能不匹配。

移项得,\((x-1)G=F\)。

导一下,\(G+(x-1)G'=F'\)。

令 \(x=1\),得 \(G(1)=F'(1)\)。

考虑对 \(G\) 做转移,每次向后添加一段 \(b\)。当然可能添加中途已经存在最后一段等于 \(b\) 的情况,我们也要考虑,那就有:

\[\frac{x^n}{m^n}G=\sum_{i=1}^n[i]F\cdot \frac{x^{n-i}}{m^{n-i}}
\]

其中 \(i\) 满足,\(b[1,i]=b[n-i+1,n]\)。

移项得:

\[G=\sum_{i=1}^n [i] F\cdot \frac{m^i}{x^i}
\]

令 \(x=1\),对下式求和即可。

\[ans=G(1)=\sum_{i=1}^n[i]F(1)\cdot m^i
\]

CODE

#include<bits/stdc++.h>
using namespace std; #define ll long long
#define N 200000
#define pll pair<ll,ll> const int maxn=2e5+5;
const ll mod=998244353,base=20090327,mod1=1e9+7,mod2=1e9+9; int n,m;
int b[maxn]; ll pw1[maxn],pw2[maxn],sum1[maxn],sum2[maxn]; inline void init()
{
pw1[0]=pw2[0]=1;
for(int i=1;i<=N;i++)
pw1[i]=pw1[i-1]*base%mod1,
pw2[i]=pw2[i-1]*base%mod2;
} inline pll calc(int l,int r){return {(sum1[r]-sum1[l-1]*pw1[r-l+1]%mod1+mod1)%mod1,(sum2[r]-sum2[l-1]*pw2[r-l+1]%mod2+mod2)%mod2};}
inline void solve()
{
ll tmp=1,ans=0;
for(int i=1;i<=n;i++)
{
tmp=tmp*m%mod;
if(calc(1,i)==calc(n-i+1,n)) ans=(ans+tmp)%mod;
}
printf("%lld\n",ans);
} int main()
{
freopen("x.in","r",stdin);
freopen("x.out","w",stdout);
int _;
init();
scanf("%d",&_);
while(_--)
{
memset(sum1,0,sizeof(sum1));
memset(sum2,0,sizeof(sum2));
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
for(int i=1;i<=n;i++)
sum1[i]=(sum1[i-1]*base+b[i]%mod1)%mod1,
sum2[i]=(sum2[i-1]*base+b[i]%mod2)%mod2;
solve();
}
}

命运的X的更多相关文章

  1. 一个页面实例化两个ueditor编辑器,同样的出生却有不同的命运

    今天遇到一个比较怪异的问题,有一项目需要在同一个页面上展现两个ueditor编辑器,在展现时并不任何问题,但当点击了“保存”按钮时就出错了,有其中一个ueditor在asp.net中无法获取编辑器的值 ...

  2. HDU 2571 命运

    命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  3. HDUOJ----2571(命运)(简单动态规划)

    命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  4. HDU 2571 命运 动态规划

    命运 http://acm.hdu.edu.cn/showproblem.php?pid=2571 Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到, ...

  5. HDU 2571 命运 (DP)

    命运 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Pr ...

  6. hdu2571 命运 动态规划Dp

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=2571" target="_blank">http://acm. ...

  7. HDU-2571命运

    Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机 ...

  8. 命运(HDU 2571 简单动态规划)

    命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  9. hdu 2571 命运(dp)

    Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个 ...

  10. HDU2571:命运(DP)

    Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个 ...

随机推荐

  1. Docker 构建多平台镜像

    构建多平台镜像的方法分为两种:一种是在不同平台的机器上分别构建并推送对应平台的镜像,然后通过 Docker Manifest 将两个镜像标签合并为一个.另一种是通过 Docker buildx 在一台 ...

  2. 【YashanDB知识库】调整NUMBER精度,再执行统计信息收集高级包偶现数据库异常退出

    [问题分类]功能使用 [关键字]NUMBER类型精度修改,统计信息收集 [问题描述]存量的表将NUMBER类型的字段精度从小精度调整为大精度时,数据库收集这张业务表的统计信息时,会导致数据库异常退出. ...

  3. Mongodb入门5

    最近在用MongoDBKoa2做个小项目,记录一下: 首先,如何连接线上数据库: const url = `mongodb://user:pwd@ipaddr:27017/Blog`; const m ...

  4. 第一个鸿蒙程序Hello Word

    DevEco Studio介绍 HUAWEI DevEco Studio(以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设备 ...

  5. 音视频入门-2-ffmpeg-Linux下编译浅析,推流拉流快速体验

      下载ffmpeg http://ffmpeg.org/download.html 1 .2 两种方式可以下载, 皆可. 编译ffmpeg ./configure -prefix=/usr/loca ...

  6. [C103] 斐波那契数列

    设 \((i,j)=gcd(i,j)\) \[f_{i}=f_{i-1}+f_{i-2} \] \[f_{i}=f_{i-2}\times f_{1}+f_{i-1}\times f_{2} \] \ ...

  7. Java实用小工具系列2---使用StopWatch统计多个任务耗时分布

    在Java中经常需要统计程序的使用时间,如果只是一个时间段统计比较好处理,可以直接使用System.currentTimeMillis().但如果一个程序中包含多个步骤,需要统计每个步骤耗时,并且需要 ...

  8. electron 菜单选项 - 隐藏,设置菜单

    隐藏菜单 const { app, Menu, session } = require('electron'); /*隐藏electron的菜单栏*/ Menu.setApplicationMenu( ...

  9. 小程序把html代码渲染到页面上 rich-text

    <rich-text nodes="<h1>html的代码显示再小程序使用rich-text组件</h1>"></rich-text> ...

  10. Android复习(三)清单文件中的元素——> activity

    转自:  https://developer.android.google.cn/guide/topics/manifest/activity-element <activity> 语法: ...