命运的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. 使用 iRingo 解锁本该属于你的苹果服务

    为什么别人的 Spotlight 可以通过航班号查询航班信息,而我的不行?为什么别人的 Spotlight 可以直接看英超联赛的比分信息?为什么我的 Apple News 打不开?这其实是因为这些功能 ...

  2. 在 Python 中通过读取 .env 文件获得环境变量

    在编写 Python 脚本时,我们会使用一些私密数据,如调用 API 时使用的 token.为了避免隐私泄露,这些私密数据一般不直接写入脚本文件中.而是写入一个文件,并通过读取文件的方式获取私密数据内 ...

  3. diff 输出解释

    diff 最原始的 diff 我们先编写两个文件: f1: 1 2 3 4 5 6 7 8 9 f2: 1 2 3 4 5 66 7 8 9 然后我们进行比较: diff f1 f2 6c6 < ...

  4. 解决Mac安装软件的“已损坏,无法打开...”问题

    解决Mac安装软件的"已损坏,无法打开. 您应该将它移到废纸篓"问题 不管在安装时会遇到以已损坏无法打开的困惑, 解决: 一.允许"任何来源"开启 苹果从mac ...

  5. C++ weak_ptr除了解决循环引用还能做什么?

    C++: weak_ptr到底有什么用? 很多人对std::weak_ptr的认识只是不增加std::shared_ptr的引用计数,可以用来解决std::shared_ptr可能造成的循环引用问题. ...

  6. JS 希尔排序完全理解

    希尔排序的思想直白点来说就是间隔对比,比如说 我有一个数组,长度为9,则第一次分割间隔为长度的1/3 + 1,则第一次对比就是1 比 4,2 比 5, 3 比 6,4 比 7,5 比 8 , 6 比 ...

  7. TS2Vec: 面向通用的时间序列表示《TS2Vec: Towards Universal Representation of Time Series》(时间序列、对比学习、多尺度特征(池化操作)、分层对比、上下文一致性(时间戳掩码+随机裁剪))

    今天是2024年5月22日,10:24,今天看这篇经典的论文(如果你问我为什么最近频繁看论文,因为我的创新点无了,要找创新点+太菜了,菜就多看多学). 论文:TS2Vec: Towards Unive ...

  8. VS Code – Keyboard Shortcuts

    前言 记入一些自己常用到的 Keyboard Shortcuts 和 Extensions. Keyboard Shortcuts undo redo 鼠标坐标:shift + left/right ...

  9. ASP.NET Core C# 反射 & 表达式树 (第三篇)

    前言 前一篇讲完了反射, 这一篇来讲一下和反射息息相关的表达式树. 首先搞清楚 Delegate, Action, Func, Anonymous Method, Lambda, Expression ...

  10. @RequestBody注意事项

    使用@RequestBody注解时,是用于接收Content-Type为application/json类型的请求,数据类型是JSON:{"aaa":"111" ...