洛谷 P11487 「Cfz Round 5」Gnirts 10——题解

news/2025/1/4 8:08:26/文章来源:https://www.cnblogs.com/qc0817/p/18646052

洛谷P11487「Cfz Round 5」Gnirts 10


传送锚点


摸鱼环节

「Cfz Round 5」Gnirts 10

题目背景

English statement. You must submit your code at the Chinese version of the statement.


In Memory of \(\text{F}\rule{66.8px}{6.8px}\).

题目描述

题面还是简单一点好。

  • 给定 \(n, m\),以及一个长为 \(n + m\)\(\tt{01}\)\(S\)
  • 对于 \(\tt 01\)\(T\),定义 \(f(T)\)\(S\) 的最长的前缀的长度,使得该前缀是 \(T\) 的子序列 \(^\dagger\)
  • 对于每个 恰包含 \(\bm n\)\(\tt 1\)\(\bm m\)\(\tt 0\) \(\tt{01}\)\(T\),求 \(f(T)\) 的和。答案对 \(2933256077^\ddagger\) 取模。

\(\dagger\):请注意,子序列可以不连续。换句话说,\(a\)\(b\) 的子序列,当且仅当在 \(b\) 中删去 \(\geq 0\) 个字符后,可以得到 \(a\)。注意,空串总是任何串的子序列。

\(\ddagger\):模数为质数。

输入格式

第一行包含两个整数 \(n, m\)

第二行包含一个长度为 \(n + m\)\(\tt 01\)\(S\)

输出格式

输出一行一个整数,表示答案对 \(2933256077\) 取模后的结果。

样例 #1

样例输入 #1

2 1
000

样例输出 #1

3

样例 #2

样例输入 #2

5 5
0010111011

样例输出 #2

1391

提示

「样例解释 #1」

所有可能的序列有且仅有公共序列 \(\texttt{0}\)。因为恰有 \(3\) 种不同的 \(T\)\(\tt 110, 101, 011\)),所以答案为 \(1\times 3 = 3\)

「数据范围」

对于所有测试数据,保证 \(1 \leq n, m \leq 3\times 10^6\)

本题采用捆绑测试。

  • Subtask 0(13 points):\(\max(n, m) \leq 5\)
  • Subtask 1(13 points):\(\max(n, m) \leq 100\)
  • Subtask 2(34 points):\(\max(n, m) \leq 3 \times 10^3\)
  • Subtask 3(40 points):无特殊限制。

大数学。


正片开始

考虑到我们只关心答案,而答案只需要 \(S\) 某种前缀的个数,并不需要考虑具体的方案,于是我们可以从前缀的方向考虑。

对于答案而言,首先答案对质数取模,其次每个合法的\(T\),可以看作是 \(n\)\(1\)\(m\)\(0\) 的一种组合。于是得到暴力枚举每种组合计算答案的朴素算法,很显然,这只能搞到13分。

考虑对 \(S\) 的前缀一位位处理答案,对于一个 \(S\) 的前缀 \(k\) ,长度为 \(l\) ,其中有 \(cnt0\)\(0\)\(cnt1\)\(1\)

假设第 \(l+1\) 位为 \(1\) ,那显然,剩下的 \(n-cnt1\)\(1\) 只能插在第 \(l\) 位之前,不然会导致前缀变长。
也就是要把 \(n-cnt1\)\(1\) 分散在 \(cnt0\)\(0\) 之间,两个 \(0\) 之间可以没有1。
于是插入\(1\)的答案为 \(\dbinom{n-cnt1+cnt0-1}{cnt0-1}\) 同理, \(0\) 则是有 \(cnt1\) 块板,于是 \(0\) 的答案 \(\dbinom{m-cnt0+cnt1}{cnt1}\)

一位的答案为:

\[ g(l)=\begin{cases} \dbinom{n-cnt1+cnt0-1}{cnt0-1}\times \dbinom{m-cnt0+cnt1}{cnt1},S_{l+1}=1\\ \dbinom{n-cnt0+cnt1-1}{cnt1-1}\times \dbinom{m-cnt1+cnt0}{cnt0},S_{l+1}=0\\ \end{cases} \]

$ans=\sum_{i=1}^{n+m} i\times g(i) $。


完整代码

#ifdef ONLINE_JUDGE
#else
#define Qiu_Cheng
#endif
#include <bits/stdc++.h>
#define int long long 
using namespace std;
// typedef long long ll;
const int N=6e6+50,M=1e6,mod=2933256077;
int fac[N],ifac[N],inv[N];
int C(int a,int b)
{if(a==b) return 1;if(a<b||b<0) return 0;return fac[a]*ifac[a-b]%mod*ifac[b]%mod;
}
void YCL()
{fac[0]=1;inv[1]=1;ifac[0]=1;for(int i=1;i<=6e6;i++){fac[i]=fac[i-1]*i%mod;if(i>=2)inv[i]=(mod-mod/i)*inv[mod%i]%mod;ifac[i]=ifac[i-1]*inv[i]%mod;}
}
int n,m,len,ans=0;
string s;
inline void solve()
{   YCL();cin>>n>>m;len=n+m;cin>>s;s=' '+s;int cnt0=0,cnt1=0;for(int i=1;i<=len;i++){if(s[i]=='0')cnt0++;else cnt1++;ans=(ans+i*(s[i+1]=='0'?C(m-cnt0+cnt1-1,cnt1-1)*C(n-cnt1+cnt0,cnt0)%mod:C(n-cnt1+cnt0-1,cnt0-1)*C(m-cnt0+cnt1,cnt1)%mod))%mod;}cout<<ans<<endl;}
signed main()
{
#ifdef Qiu_Chengfreopen("1.in","r",stdin);freopen("1.out","w",stdout);
#endif// ios::sync_with_stdio(false);// cin.tie(0);// cout.tie(0);// int QwQ;// cin>>QwQ;// while(QwQ--)solve();solve();return 0;
}//  6666   66666    666666
// 6    6  6    6       6
// 6    6  6666       6
// 6    6  6   6    6
//  6666   6    6  6666666//g++ -O2 -std=c++14 -Wall "-Wl,--stack= 536870912 " cao.cpp -o cao.exe

完结收工!!!!!

个人主页

看完点赞,养成习惯

\(\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/862323.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于高德地图API在Python中实现地图功能的方法

本文介绍在高德开放平台中,申请、获取地图API的Key的方法;同时通过简单的Python代码,调取API信息,对所得Key的可用性加以验证~本文介绍在高德开放平台中,申请、获取地图API的Key的方法;同时通过简单的Python代码,调取API信息,对所得Key的可用性加以验证。首先,我们进入…

活动对象----active object

一.preface 近期学习QPC框架,其核心之一就是 actvie-object,活动对象的出现是为了解决并发(阻塞、数据竞争)问题。笔者这里做一篇笔记,方便日后回顾。 二.What is "active object"活动对象的组成框架代码如下点击查看代码 typedef struct Active Active; typedef …

新的一年,我决定拆解一个蓝牙接收器

哈哈,容我介绍一下,如果大家对电子感兴趣,可以看一下下面的图片,会经常更新优秀的原创文章。再次感谢每一个努力的电子爱好者。今天我们来拆解一个蓝牙接收器,首先我们需要有一个直观的印象。下图就是我们这次需要拆解的对象。我再想这么小的接收器,电路是怎么放进去得呢…

jfianl 如何定时某个时间点执行一个任务

如果我们需要在某个点执行一个任务,可以用使用以下方法,首先在操作之间先明白思路 参考技术来源:https://jfinal.com/doc/9-2 第一步,先安装包,因为 这是第三方包: <dependency> <groupId>it.sauronsoftware.cron4j</groupId> <artifactId>cr…

Window平台下Visual Studio版本和Qt构建kit 以及OpenCV的对应关系

1、VS版本、MSVC版本、工具集的对应关系 参考https://www.cnblogs.com/lidabo/p/183977552、Qt中的构建kit和MSVC的对应关系 qt中使用对应版本的kit必须安装对应版本的VS才能使用3、OpenCV的VC17文件夹和VS版本的对应关系 OpenCV中的VC17文件夹就是指用的VS2022编译的库,visua…

题解:AT_abc386_d [ABC386D] Diagonal Separation

分析题面,发现题目求的是是否存在一个白点被 \((1, 1)\) 和任意一个黑点围成的矩形内。 先将所有黑点按 \(x\) 坐标排序。 枚举所有的白点。 找到所有横坐标不比该白点横坐标小的所有黑点的纵坐标的最大值所属点。如果该点的纵坐标小于该白点的纵坐标:(蓝点代表题目中的白点…

【Miscellaneous】一道高质量的杂项题,涉及暴破、Cloakify-python2、零宽、emoji-AES等知识点

引言 下半年很忙,好久不做题,趁2025元旦放假整理一道高质量的题目,怀念一下繁忙的2024年。 题目 考虑到某公司的不分享精神或许会有版权之类的争端,文件链接以后就不放了。 名称:happymd5 提示:有好多奇奇怪怪的MD5值,这是用来干什么的呢。 Writeup(WP)题目附件cipher…

2025-01-01:优质数对的总数Ⅰ。用go语言,给定两个整数数组 nums1 和 nums2,分别长度为 n 和 m,以及一个正整数 k。 如果 nums1 数组中的元素 nums1[i] 能被

2025-01-01:优质数对的总数Ⅰ。用go语言,给定两个整数数组 nums1 和 nums2,分别长度为 n 和 m,以及一个正整数 k。 如果 nums1 数组中的元素 nums1[i] 能被 nums2 数组中的元素 nums2[j] 乘以 k 除尽,则称 (i, j) 为一个优质数对(其中 0 <= i <= n - 1,0 <= j …

高光谱图像选择波段的研究(转载)

高光谱图像选择波段的研究博文: 高光谱图像选择波段的研究 高光谱波段选择 LY-林雨    2016-08-25 12:08:45 发布免责声明:本文仅代表个人观点,如有错误,请读者自己鉴别;如果本文不小心含有别人的原创内容,请联系我删除;本人心血制作,若转载请注明出处 本文是根据 魏…

Webstorm 关闭 拼写错误

问题描述:cmd+,唤醒 设置把这个勾去掉就行

跨年,你怎么过

2024年最后一天,去了一趟上海的地标性建筑,感慨了下,来上海也13年来

2025.1.1 鲜花

Cdq 解决一类最值和双端点有关的数点问题Cdq 解决一类最值和双端点有关的数点问题COLORFUL BOX 真っ白な想いに 梦のかけらを 描いて 动き出す未来 子供の顷に知った 心が跃るような わくわくする感情を 今も覚えてるよ 迷いや不安はない 期待に溢れてる 何にだってなれ そうな…