首页 > 其他分享 >2024牛客暑期多校训练营4 - J. Zero (究极卡常)

2024牛客暑期多校训练营4 - J. Zero (究极卡常)

时间:2024-10-14 21:33:09浏览次数:1  
标签:究极 int res 多校 long 2024 str pow quick

\(O(N^2)\) AC。

输入后预处理 ? 数量的前缀和。

双层循环找所有的区间 \([l,r]\) 使区间内没有 \(0\),找到以后直接用逆元+快速幂求 \(\frac{(r-l+1)^k}{2^{sum_{r}-sum_{l-1}}}\),最后累加和。

因为数据过水,这样已经能 AC 了。

#include<cstdio>
using namespace std;

const int N=1e5+5,P=998244353;
int n,k;
char str[N];
int qsum[N]; //the number of '?' in str[1,i]

int quick_pow(long long x,int y)
{
	long long res=1;
	while(y)
	{
		if(y&1) res=res*x%P;
		x=x*x%P;
		y>>=1;
	}
	return (int)res;
}
inline int inv(int x)
{
	return quick_pow(x,P-2);
}

int main()
{
	scanf("%d%d",&n,&k);
	scanf("%s",str+1);
	for(int i=1;i<=n;i++)
		qsum[i]=qsum[i-1]+(str[i]=='?');
	long long ans=0;
	for(int l=1;l<=n;l++)
	{
		if(str[l]=='0') continue;
		for(int r=l;r<=n;r++)
		{
			if(str[r]=='0') break;
			int q=qsum[r]-qsum[l-1];
			ans=(ans+1ll*inv(quick_pow(2,q))*quick_pow(r-l+1,k))%P;
		}
	}
	printf("%lld\n",ans);
	return 0;
}

然而,还没有到极限。

预处理出所有的 \(2^i \bmod 998244353, i \in [0,n]\) 和 \(i^k \bmod 998244353, i \in [0,n]\),这样过程中就可以不用重复计算。

但还不够,inv(quick_pow(2,q)) 同样可以预处理,所以在前面同时预处理 \((2^i)^{-1} \bmod 998244353\),这样过程中也不用计算逆元了。

#include<cstdio>
using namespace std;

const int N=1e5+5,P=998244353;
int n,k;
char str[N];
int qsum[N]; //the number of '?' in str[1,i]
int binpow[N],powk[N],invbinpow[N];

int quick_pow(long long x,int y)
{
	long long res=1;
	while(y)
	{
		if(y&1) res=res*x%P;
		x=x*x%P;
		y>>=1;
	}
	return (int)res;
}
inline int inv(int x)
{
	return quick_pow(x,P-2);
}

int main()
{
//	freopen("zero.in","r",stdin);
//	freopen("zero.out","w",stdout);
	
	scanf("%d%d",&n,&k);
	scanf("%s",str+1);
	binpow[0]=1;
	invbinpow[0]=inv(binpow[0]);
	for(int i=1;i<=n;i++)
	{
		qsum[i]=qsum[i-1]+(str[i]=='?');
		binpow[i]=binpow[i-1]<<1;
		if(binpow[i]>=P) binpow[i]-=P;
		invbinpow[i]=inv(binpow[i]);
		powk[i]=quick_pow(i,k);
	}
	long long ans=0;
	for(int l=1;l<=n;l++)
	{
		if(str[l]=='0') continue;
		for(int r=l;r<=n;r++)
		{
			if(str[r]=='0') break;
			int q=qsum[r]-qsum[l-1];
			ans=(ans+1ll*invbinpow[q]*powk[r-l+1])%P;
		}
	}
	printf("%lld\n",ans);
	return 0;
}

标签:究极,int,res,多校,long,2024,str,pow,quick
From: https://www.cnblogs.com/jerrycyx/p/18466200

相关文章

  • 2024/10/14日工作总结
    完成数据结构作业,用栈和队列两种方法实现回文;栈的实现:includeusingnamespacestd;constexprautoMAXSIZE=50;typedefstruct{char*base;char*top;intstacksize;}sqStack;voidInitStack(sqStack&s){s.base=newchar[MAXSIZE];if(!s.base)exit(OVERFLOW)......
  • 【JPCS独立出版 | ISSN:1742-6596 | 往届均稳定EI检索】第九届计算机技术与机械电气工
    第九届计算机技术与机械电气工程国际学术论坛(ISCME2024)将于2024年11月8-10日在中国南京隆重召开。本次论坛将围绕“计算机技术”、“机械电气工程”等多个学术领域进行深度探讨,旨在融合各专业的最新研究成果,以促进相关学科和行业的创新与发展。会议将汇聚来自全球的学者......
  • [20241013]sqlplus spool与文件覆盖.txt
    [20241013]sqlplusspool与文件覆盖.txt--//这个问题在8月份遇到的问题,我发现在sqlplus下spoola.sql文件,并没有在当前目录产生a.sql文件,后来我发现建立在环境变量--//ORACLE_PATH定义的目录下,当时以为自己打开多个会话,没有注意自己工作的当前目录。事后我测试,问题视乎消失了,我再......
  • 2024.10.13 模拟赛
    2024.10.13模拟赛T1「KDOI-10」商店砍价赛时直接口胡出一个错误的贪心。一开始的想法是按照\(v[i]\)排序,然后假设输入的长度为\(n\)位。那么对于排序后\(n-5\)位直接选择操作一。对于剩下的,直接bdfs所有情况选答案,复杂度\(O(n\logn)\)。貌似可行,结果随便一个数据......
  • 2024/10/13 模拟赛总结
    人机体检,\(0+0+0+0=0\),打代码源去了#A.一般图最小匹配下次看到这种范围一定要想到dp啊,令\(dp_{i,j}\)为前\(i\)个元素选了\(j\)对点的最小代价由于边权是绝对值,可以对原数组排一遍序,选取的两个点就一定在排序后数组的相邻节点那么就可以得出式子:\(dp_{i,j}=\min\{dp_......
  • 2024.10.14 test
    B平面上有\(n\)个点以及\(k\)条未知的平行线,每个点都分属一条线,每条线都有至少\(2\)点。给出一种方案。\(n\le4e4,k\le50\)。每个点分属一条线的条件非常重要。考虑利用鸽巢原理。考虑取出\(k+1\)个没有两对点同斜率的点,那么,至少有两个点在一条线上,那么就可以确定斜......
  • 【2024潇湘夜雨】WIN10_Ent-G_22H2.19045.5011软件选装纯净特别版10.14
    【系统简介】=============================================================1.本次更新母盘来自WIN10_Ent-G_22H2.19045.5011.进桌面后稍等片刻,等待后续部分优化完成。2.全程离线精简、无人值守调用优化处理制作。部分优化适配系统可能要重启几次,即使显示适配失败也不要在意,可能......
  • 2024最详细的Java八股文合集!
    1、HashMap底层,插入,扩容  前置知识:  二叉树:每个节点至多只有两个子节点的树  搜索二叉树:满足当前节点的左子树上的节点不能大于当前节点,右子树上的节点不能小于当前节点的二叉树  红黑树:一种自平衡的搜索二叉树,能保证遍历,插入,删除的时间复杂度永远是O(logn)  红......
  • [2024领航杯] Pwn方向题解 babyheap
      [2024领航杯]Pwn方向题解babyheap前言:当然这个比赛我没有参加,是江苏省的一个比赛,附件是XiDP师傅在比赛结束之后发给我的,最近事情有点多,当时搁置了一天,昨天下午想起来这个事情,才开始看题目,XiDP师傅说是2.35版本的libc,确实高版本libc的却棘手,我经验太浅了调试半天,最后让我们......
  • 和TEN、CosyVoice、Rokid一起「组装」你的专属多模态 Agent!丨RTE2024 AI 工坊报名
       2024年10月25日~26日,由声网和RTE开发者社区联合主办的RTE2024第十届实时互联网大会将在北京·悠唐皇冠假日酒店正式开启! 大会以「AI爱」为主题,推出覆盖实时互联网全生态的论坛及周边活动共计20余场。 这次RTE开发者社区为大家准备了一场RTE2024......