首页 > 其他分享 >【题解】ABC293E Sol

【题解】ABC293E Sol

时间:2023-03-17 21:35:21浏览次数:46  
标签:10 le 题解 ll Sol sqrt times cdots ABC293E

题目大意

给定整数 \(A,X,M\),求 \(\sum\limits^{X-1}_{i=0} A^i\) 对 \(M\) 取模的值。

数据范围:\(1 \le A,M \le 10^9\),\(1 \le X \le 10^{12}\)。


题目分析

直接算显然会 T 飞,所以尝试把这个式子弄成一些比较好求的玩意儿。

手玩一下样例。例如 \(A=8,X=10\) 时,答案就为 \(\sum\limits^{10-1}_{i=0} 8^i=8^0+8^1+\cdots+8^9=(8^0+8^5)(8^0+8^1+8^2+8^3+8^4)=(8^0+8^4)(8^0+8^1+8^2+8^3)+8^8+8^9=\cdots\)。也就是说,我们可以把整个式子分解成关于 \(A\) 的两个多项式的乘积加上若干个 \(A\) 的幂次方的形式,求出这两个多项式的值乘起来并加上剩下几个 \(A^i\) 即可。

但是这样似乎还不能完全解决问题,要是这两个多项式的长度太长或者剩余的 \(A^i\) 太多,照样 T,考虑控制两个多项式的长度和 \(A^i\) 的数量。

于是我们就可以想到一个叫根号的东西。

可以把式子拆成如下形式:\(\sum\limits^{X-1}_{i=0} A^i=(A^{0\times[\sqrt{X}]}+A^{1\times[\sqrt{X}]}+\cdots+A^{([\sqrt{X}]-1)\times[\sqrt{X}]})(A^0+A^1+\cdots+A^{[\sqrt{X}]-1})+A^{[\sqrt{X}]\times[\sqrt{X}]}+A^{[\sqrt{X}]\times[\sqrt{X}]+1}+\cdots+A^X\),比如 \(A=8,X=10\) 时,答案就可表示成 \([(8^0+8^3+8^6)(8^0+8^1+8^2)+8^9]\)。这样,两个多项式的长度和剩余 \(A^i\) 的数量最多也不会超过 \([\sqrt{X}]\),时间复杂度约为 \(O(\sqrt{X}\log X)\),而 \(X\le 10^{12}\),理论上能过。

但理论上能过并不代表它不会 T。这个时间复杂度实际上相当极限,如果用了一些常数比较大的写法的话依然是过不去的。比如快速幂使用递归写法时会 T 掉几个点,而换成循环快速幂就能 1500ms 卡过,不要问我怎么知道的。

(其实出题人完全可以把 \(X\) 开成 \(10^{18}\),把这个解法彻底卡掉,但良心出题人似乎特意把这种做法放过去了?)


代码

#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define pii pair<int,int>
#define pll pair<ll,ll>
using namespace std;
ll a,x,MOD,len,ans,sum,sum1;
ll qpow(ll x,ll y) {
	ll mul=1;
	while (y) {
		if (y&1) mul=mul*x%MOD;
		x=x*x%MOD,y>>=1;
	}
	return mul;
}
int main() {
	scanf("%lld%lld%lld",&a,&x,&MOD),a%=MOD;
	len=sqrt(x);
	for (ll i=0;i<len;i++)
		sum=(sum+qpow(a,i))%MOD,sum1=(sum1+qpow(a,i*len))%MOD;
	for (ll i=len*len;i<x;i++) ans=(ans+qpow(a,i))%MOD;
	printf("%lld",(ans+sum*sum1%MOD)%MOD);
	return 0;
}

标签:10,le,题解,ll,Sol,sqrt,times,cdots,ABC293E
From: https://www.cnblogs.com/CarroT1212/p/ABC293E.html

相关文章

  • Intellij IDEA: Cannot resolve symbol ‘var‘引出的问题
    在File>ProjectStructure:点击左侧的Project,设置ProjectSDKs为openjdk-17;点击左侧的Modules,设置ModuleSDK为17;这里给出下载JDK17链接一路点击通过,傻瓜式安装。如......
  • 修改 resolv.conf 文件后,重启后会还原配置的问题。
    问题出现的原因:当Network每次启动的时候,会读取网卡ifcfg-eth0中的配置配置参数 PEERNDS=yes,读取配置参数在以下两种情况任意一种,PEERNDS都会默认为yes1、ifcfg-......
  • h5中audio无法播放问题解决
    H5页面中添加audio标签,通过调用play()方法进行播放音频,电脑可以正常听到音效,微信中打开没有声音。<audioid="audio"ref="audio"class="sound"><sourcesrc="@/st......
  • msfconsole入门
    jpg改pdf本文我们简单的来学习,msfconsole在实际的渗透测试中长应用的手段和方法。以及msf在后渗透阶段的使用。注意本文所讲到的技术仅在本地靶场环境运行,同时本文的......
  • BUUCTF-MISC-LSB(stegsolve的一种妙用)
    题目已知是LSB隐写丢入stegsolve,点>,可以看见Redplane0,Greenplane0,Blueplane0上边好像有东西点analyse->dataextract,让红绿蓝通道为0,可以看见是png图片点sa......
  • 【微电平台】-高并发实战经验-奇葩问题解决之旅
    作者:京东科技孙亮微电平台微电平台是集电销、企业微信等于一体的综合智能SCRMSAAS化系统,涵盖多渠道管理、全客户生命周期管理、私域营销运营等主要功能,目前已经有60+京东......
  • Centos7系统在开启进入系统报错:Give root password for maintenance(or type Control-D
    报错信息:在进入系统时,不能正常进入系统,出现了Giverootpasswordformaintenance(ortypeControl-Dtocontinue):的报错。 报错原因:1、在之前写入的/etc/fstab文件有......
  • 【题解】UOJ#37. [清华集训2014]主旋律
    我自己写的代码自己都看不懂。所以芝士一种船新做法,爱来自学弟,lc学长好工作。题意校内OJ的题面过于简洁,人话:给定一个有向的强连通图,问任意删边使得新图仍强连通的方......
  • 江南信息学2023第四周练习20230317 题解
    首先,通报批评上周抄袭题解的同学有:黄耿益,黄远鸿,博客提供题解不是让大家直接复制粘贴抄袭的,而是在大家不会做时提供思路和解决方案,可以抄写,但不允许直接复制粘贴抄袭,请养成......
  • High-Resolution Image Synthesis with Latent Diffusion Models
    目录概大概流程代码RombachR.,BlattmannA.,LorenzD.,EsserP.andOmmerB.High-resolutionimagesynthesiswithlatentdiffusionmodels.InIEEEComputerV......