首页 > 其他分享 >P9511 『STA - R3』大豆 题解--zhengjun

P9511 『STA - R3』大豆 题解--zhengjun

时间:2023-08-09 21:12:20浏览次数:35  
标签:10 le frac P9511 R3 int 题解 sum ll

妙妙题。

题意

给定 \(F_0(x)=a_{(x-1)\bmod n +1}\)。

\[F_k(x)=F_{k-1}(x)-\sum\limits_{i=2}^n F_k(\lfloor\frac{n}{i}\rfloor) \]

求 \(F_k(m)\)。

\(1\le n\le 10^4,1\le m\le 10^{10},1\le k\le 3\)。

直接数论分块求解的复杂度是 \(O(m^{\frac{3}{4}}k)\),难以通过。

如果像杜教筛那样做到 \(O(m^{\frac{2}{3}}k)\) 的话就能通过。

关键在于如何快速求解 \(F_k(x),x\le m^{\frac{2}{3}}\)。

考虑杜教筛的逆过程,\(F\) 相当于杜教筛的前缀和函数,那么复原出原函数:

\[G_k(x)=F_k(x)-F_k(x-1)\\ =G_{k-1}(x)-\sum\limits_{i=2}^n F_k(\lfloor\frac{n}{i}\rfloor)-F_k(\lfloor\frac{n-1}{i}\rfloor)\\ =G_{k-1}(x)-\sum\limits_{i>1,i|n} F_k(\frac{n}{i})-F_k(\frac{n}{i}-1)\\ =G_{k-1}(x)-\sum\limits_{i>1,i|n} G_k(\frac{n}{i})\\ \]

这样,就可以 \(O(kB\ln B)\) 处理出 \(F_k(1\sim B)\)。

于是,复杂度为 \(O(kB\ln B+\frac{km}{\sqrt{B}})\),取 \(B=10^6\) 即可通过。

代码

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=1e4+10,M=1e6+10,mod=23068673;
int his[4][M],n,k,a[N];
ll m;
int HIS[3][N];
int cnt;
ll num[N];
unordered_map<ll,int>trs;
int calc(int k,ll n){
	if(!k)return a[(n-1)%(::n)+1];
	if(n<M)return his[k][n];
	int id=trs[n];
	if(~HIS[k-1][id])return HIS[k-1][id];
	ll ans=calc(k-1,n);
	for(ll l=2,r;l<=n;l=r+1){
		r=n/(n/l);
		ans=ans-(r-l+1)*calc(k,n/l)%mod;
	}
	return HIS[k-1][id]=ans%mod;
}
void init(int m){
	for(int i=1;i<=m;i++)his[0][i]=a[(i-1)%n+1];
	for(int i=m;i>=1;i--)(his[0][i]+=mod-his[0][i-1])%=mod;
	for(int t=1;t<=k;t++){
		for(int i=1;i<=m;i++)his[t][i]=his[t-1][i];
		for(int i=1;i<=m;i++){
			for(int j=i+i;j<=m;j+=i){
				(his[t][j]+=mod-his[t][i])%=mod;
			}
		}
	}
	for(int t=1;t<=k;t++){
		for(int i=1;i<=m;i++){
			(his[t][i]+=his[t][i-1])%=mod;
		}
	}
}
int main(){
	freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	memset(HIS,-1,sizeof HIS);
	scanf("%d%lld%d",&n,&m,&k);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	init(M-1);
	for(int i=1;m/i>=M;i++)num[++cnt]=m/i;
	reverse(num+1,num+1+cnt);
	for(int i=1;i<=cnt;i++)trs[num[i]]=i;
	cout<<(calc(k,m)+mod)%mod;
	return 0;
}

标签:10,le,frac,P9511,R3,int,题解,sum,ll
From: https://www.cnblogs.com/A-zjzj/p/17618000.html

相关文章

  • 大连人工智能计算平台——华为昇腾AI平台——高性能计算HPC的pytorch源码编译报错——
     如题:pytorch源码编译报错——USE_CUDA=OFF  在编译pytorch源码的时候发现错误,虽然编译环境中已经安装好CUDA和cudnn,环境变量也都设置好,但是编译好的pytorch包wheel总是在运行torch.cuda.is_available()显示false,于是从编译源码的过程中进行重新检查,发现在编译的过程中提......
  • 8 月 9 日测试题解
    集体被大样例薄纱了。T1P1292有两个容量分别为\(a\)与\(b\)的酒杯与一个容量无限的酒桶,有以下几种操作:用酒桶将\(a\)倒满;将\(b\)中的酒全部倒入酒桶;将\(b\)中的酒倒入\(a\),直到\(a\)被装满或\(b\)被倒空。问\(a\)中可能倒出的最少的酒是多少以及分别至......
  • 题解 CF1857G【Counting Graphs】
    一个非常显然的事情是:总方案数即为每条边方案数之积。树边已经确定,考察每条非树边\((u,v)\)可以怎么取。给定的树\(T\)是唯一最小生成树,这意味着非树边\((u,v)\)要么不存在,要么权值大于\(T\)上\((u,v)\)之间任意一条边的权值。设\(T\)上\((u,v)\)间的最大边权为\(......
  • 杭电多校 2023 杂题题解
    打算只写点有意思的题。D1JEasyproblemI注意到\(x_i\)单增,所以一个数被减到负数之后,所有的操作都会将它减到负数,也就等价于乘\(-1\)再相加。使用一棵线段树维护所有数,将这些数分为两种,一种如上,一种是区间减。最终所有数都会变为需要乘\(-1\)再相加的数,于是只要每次精......
  • luogu P4200 千山鸟飞绝 题解 【一维数组套平衡树】
    目录题目解题思路code题目题目链接解题思路首先,此题有明显的插入、删除、查找,所以必须要使用平衡树。考虑如何使用平衡树维护每个鸟的状态。发现很不方便,因为鸟的位置改变,整个平衡树的值都要修改。考虑针对每个节点开一颗平衡树,这样就有\(3e4\times3e4\)棵树。这显然太多了......
  • P9507 [BalkanOI2018] Popa 题解
    原题传送门题目描述Ghiță有一个下标从\(0\)开始的正整数序列\(S\)。因为他是喀尔巴阡的国王,所以他想要构造一个节点编号为\(0,1,\ldots,N-1\)的二叉树,满足:树的中序遍历按节点编号升序排列。二叉树的中序遍历由以根的左子节点(如果存在)为根形成的子树的中序遍历,根的节......
  • 桐柏邀请赛 S15 题解
    定位:给中低段位一点压力,给中高段位一点信心!A发现只是单向变换\((0\to1)\),用两个变量维护位置最小值和最大值即可。#defineintlonglongintn,q,maxn,minn=1e18+1,x;signedmain(){ n=read(),q=read(); while(q--){ x=read(); maxn=max(maxn,x); minn=min(minn,x......
  • CF1857B Maximum Rounding 题解
    题面题目大意给定\(T\)组数据,每组数据一个自然数\(n\),可以多次选择第\(k\)位数进行四舍五入,求出四舍五入后该数的最大值。分析思路思想:贪心。这里给定了两种操作。四舍和五入。显然我们想要让最终的结果最大,我们的操作只能进行五入而不可以进行四舍。因为如果我们进行了......
  • 国标GB28181视频平台LntonGBS(源码版)国标平台级联时,通道上传上级宇视平台无法接收的问
    LntonGBS是基于公安部推出的GB/T28181协议开发的视频平台,在安防监控领域应用广泛。下面是一些关于LntonGBS平台的主要特点:GB/T28181协议兼容性、视频直播和转码、云端录像和存储、语音对讲和警告功能、平台级联功能。通过以上的功能和特点,LntonGBS平台能够满足安防监控领域各类场景......
  • sudo: a terminal is required to read the password; either use..... 问题解决方法
    转载自:sudo:aterminalisrequiredtoreadthepassword;eitheruse……问题解决方法_akaiziyou的博客-CSDN博客问题sudo:aterminalisrequiredtoreadthepassword;eitherusethe-Soptiontoreadfromstandardinorconfigureanaskpasshelper出现场景某个......