2019银川icpc F 数论分块,技巧

icpc2019银川 文章目录icpc2019银川A. Girls Band PartyB. So EasyF. Function!G. Pot!!H. Delivery RouteI. Base62K. Largest Common SubmatrixN. Fibonacci Sequence icpc2019银川 A. Girls Band Party 大意: 给出n张牌,每张牌都有花色和名字,以及价值,只能选择不同名字的五张牌,有5种奖励名字和一种奖励花色,和奖励名字相同的名字可以提供10%的加成,相同的颜色可以提供20% 阅读详情

题意:

给出nnn,计算
∑a=2n(a∑b=an⌊fa−1(b)⌋⌈fb−1(a)⌉),fa(x)=ax \sum_{a=2}^{n}(a\sum_{b=a}^{n}\lfloor f_{a}^{-1}(b)\rfloor\lceil f_{b}^{-1}(a)\rceil),f_{a}(x)=a^{x} a=2∑n​(ab=a∑n​⌊fa−1​(b)⌋⌈fb−1​(a)⌉),fa​(x)=ax
原题如此说明fa−1(x)f_{a}^{-1}(x)fa−1​(x):fa−1(x)f_{a}^{-1}(x)fa−1​(x) is the inverse function of fa(x)f_{a}(x)fa​(x)

Solution:

首先需要注意一个点,fa−1(x)f_{a}^{-1}(x)fa−1​(x)是fa(x)f_{a}(x)fa​(x)的反函数,而不是逆元,逆元是inverse element,反函数是inverse function

fa(b)=abf_{a}(b)=a^{b}fa​(b)=ab是个指数函数,于是反函数为对数函数fa−1(b)=logabf_{a}^{-1}(b)=log_{a}bfa−1​(b)=loga​b

于是原式即计算
∑a=2n(a∑b=an⌊logab⌋⌈logba⌉) \sum_{a=2}^{n}(a\sum_{b=a}^{n}\lfloor log_{a}b \rfloor\lceil log_{b}a\rceil) a=2∑n​(ab=a∑n​⌊loga​b⌋⌈logb​a⌉)
显然题意已经包含a≤ba\leq ba≤b,于是⌈logba⌉=1\lceil log_{b}a\rceil=1⌈logb​a⌉=1,那么只需要计算
∑a=2n(a∑b=an⌊logab⌋) \sum_{a=2}^{n}(a\sum_{b=a}^{n}\lfloor log_{a}b \rfloor) a=2∑n​(ab=a∑n​⌊loga​b⌋)

有关对数,今天学到一个技巧,以n\sqrt{n}n​为界分块处理,这样有什么好处?

当a>na>\sqrt{n}a>n​时,枚举的bbb不超过nnn,那么就意味⌊logab⌋=1\lfloor log_{a}b \rfloor=1⌊loga​b⌋=1

于是我们先计算a>na>\sqrt{n}a>n​部分,即
∑a=n+1n(a∑b=an1)=∑a=n+1na(n−a+1)=(n+1)∑a=n+1na−∑a=n+1na2 \sum_{a=\sqrt{n}+1}^{n}(a\sum_{b=a}^{n}1)=\sum_{a=\sqrt{n}+1}^{n}a(n-a+1)=(n+1)\sum_{a=\sqrt{n}+1}^{n}a-\sum_{a=\sqrt{n}+1}^{n}a^2 a=n​+1∑n​(ab=a∑n​1)=a=n​+1∑n​a(n−a+1)=(n+1)a=n​+1∑n​a−a=n​+1∑n​a2
第一部分等差数列求和即可,第二部分利用以下公式求和
∑i=1ni2=n(n+1)(2n+1)6 \sum_{i=1}^{n}i^2=\frac{n(n+1)(2n+1)}{6} i=1∑n​i2=6n(n+1)(2n+1)​
这个部分是O(1)O(1)O(1)得到的,接着计算a≤na\leq \sqrt{n}a≤n​的部分:
∑a=2n(a∑b=an⌊logab⌋) \sum_{a=2}^{n}(a\sum_{b=a}^{n}\lfloor log_{a}b \rfloor) a=2∑n​(ab=a∑n​⌊loga​b⌋)
此时n≤106n\leq10^6n≤106,我们考虑枚举aaa,此时如何快速求得每个aaa的值,由于出现了下取整,我们可以考虑能否进行像整除分块般的操作,一部分一部分的处理,对于对数函数logaxlog_{a}xloga​x,不难发现有这么几个区间段中,他们向下取整的值是一样的
[a,a2−1][a2,a3−1]....[ak,ak+1−1] [a,a^2-1]\\ [a^2,a^3-1]\\ ....\\ [a^k,a^{k+1}-1] [a,a2−1][a2,a3−1]....[ak,ak+1−1]
于是我们考虑这样子对bbb的所有取值分类然后分类计算,显然最多拥有323232次幂,于是对每个aaa,计算的次数都会在323232以内,是可以接受的,这部分的复杂度为O(nlogn)O(\sqrt{n}logn)O(n​logn),总复杂度为O(nlogn)O(\sqrt{n}logn)O(n​logn)

需要注意分段的时候最后一段的可能不是完整的[ak,ak+1−1][a^k,a^{k+1}-1][ak,ak+1−1]区间

#ifndef stdjudge
#include<bits/stdc++.h>
#endif
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<numeric>
#include<ctime>
#include<cmath>
#include<vector>
#include<bitset>
using namespace std;

using ll=long long;
const int N=8e5+5,inf=0x3fffffff;
const long long INF=0x3fffffffffffffff,mod=998244353;

ll n;

ll qm(ll x)
{
	return (x%mod+mod)%mod;
}

ll qpow(ll a,ll b)
{
	ll ret=1,base=a;
	while(b)
	{
		if(b&1) ret=ret*base%mod;
		base=base*base%mod;
		b>>=1;
	}
	return ret;
}

ll inv(ll x){return qpow(x,mod-2);}

ll f(ll x)
{
	return qm(x)*qm(x+1)%mod*qm(2*qm(x)%mod+1)%mod*inv(6)%mod;
}

int main()
{
	#ifdef stdjudge
		freopen("in.txt","r",stdin);
	#endif
	cin>>n;
	ll ans=0,limit=1;
	for(ll i=2;i*i<=n;i++)
	{
		limit++;
		ll last=i,now=i*i,val=1;
		while(1)
		{
			bool flag=(now-1>=n); now=min(now,n);
			ans=(ans+qm(i)*qm(val)%mod*qm(now-last+(flag))%mod)%mod;
			last=now; now*=i; val++;
			if(flag) break;
		}
	}
	cout<<qm(ans+qm(n+1)*qm(limit+n+1)%mod*qm(n-limit)%mod*inv(2)%mod-qm(f(n)-f(limit)))<<'\n';
	return 0;
}
ICPC2019银川区域赛F. Function! big-small 阅读详情

相关推荐

ICPC2019银川区域赛 D. Easy Problem

容斥、递推、欧拉降幂

ACoder 817

2019 南昌网络赛icpc I题 cdq分治或分块

题意:给你一个数组,然后每次有两种操作,操作一是修改数组里的数,操作二是查询区间[ l , r ] 里有多少个子区间满足以下条件:1、子区间内的数全部相同。2、子区间内的数在x到y之间。3、子区间得是不能延伸的。 题目链接:https://nanti.jisuanke.com/t/41356 题解:首先转化问题,设 b[ i ] = a[i]==a[i-1] ? 0 : a[i],然...

weixin_30952535的博客 298

ICPC2019银川 A. Girls Band Party

普通dp

ACoder 670

ACM-ICPC 2018 沈阳赛区网络预赛 J. Ka Chang (分块+树状数组+dfs序)

题意 给你一颗树,由两种操作: 1.把这棵树深度为DDD的点全部都加上一个值。 2.求以p为根节点的子树的权值和是多少? *思路 对于树上的东西,我们可以把他求一下DFS序,之后就可以把树上的结构变成线性的结构,之后就是查询和修改这两个东西了。 关于修改:对于修改来说,当前层的点少的时候我们直接树状数组暴力修改,对于当前层数的点太多的情况来说,我们把层数打上标记。 对于查询,我们先查...

wjmwsgj的博客 238

ICPC2019银川区域赛 E.XOR Tree

长链剖分、位运算神奇拆分

ACoder 758

ICPC2019银川区域赛 L. Xian Xiang

状压dp

ACoder 678

2018 徐州icpc网络赛 G 分块

There's a beach in the first quadrant. And from time to time, there are sea waves. A wave (xx,yy) means the wave is a rectangle whose vertexes are (00,00), (xx,00), (00,...

weixin_30436101的博客 182

2019ICPC银川区域赛 B. So Easy

需要快速反应的脑洞签到题

ACoder 536

分块(真的是优雅的暴力)

M - 一道普通题1 给出一个长为n​的数列,以及n​个操作,操作涉及区间加法,询问区间内小于某个值x​的前驱(比其小的最大元素)。 Input 第一行输入一个数字n,1≤n≤100000。 第二行输入n个非负整数,第ii个数字为ai(0≤ai≤10^9)以空格隔开。 接下来输入n行询问,每行输入四个数字opt、l、r、c(c>0),以空格隔开。 若 op...

shaohang_的博客 1522

WPF实战:HelixToolkit 3D图形开发入门指南

本文详细介绍了如何使用HelixToolkit在WPF中进行3D图形开发,从环境搭建到创建第一个3D程序(如彩色立方体),再到进阶技巧和常见问题排查。通过实战案例和性能优化建议,帮助开发者快速掌握3D场景构建和模型导入技术,提升开发效率。

weixin_29197051的博客 757

Android开发者必看:5分钟搞定DeepSeek API接入(附完整代码示例)

本文为Android开发者提供快速接入DeepSeek API的完整指南,包含环境配置、网络层设计、请求体构建等关键步骤,并附有详细代码示例。通过工程化实践,帮助开发者高效集成AI对话、代码生成等高级功能,提升移动应用竞争力。

bush的博客 535

ACM-ICPC 2018 沈阳赛区网络预赛 J Ka Chang 分块

https://nanti.jisuanke.com/t/31451 对每层的个数分块 当这个深度的节点个数&amp;gt;block时 暴力维护每个点的子树有多少个这个深度的节点 这样的层数最多有n/block个 预处理复杂度O(n*n/block) 修改直接修改这个层数总共加了多少 当深度的节点个数&amp;lt;=block时 暴力修改这个深度的每个节点 用一个bit或者线段树维护树的d...

sb的博客 444

从SRIOV到SIOV:PCIe虚拟化技术下一代革命

如果说SR-IOV是过去十年PCIe虚拟化的“标杆方案”,那SIOV就是为超大规模云数据中心、AI集群量身打造的“破局者”——它解决了SR-IOV难以逾越的扩展性瓶颈,同时平衡了性能、成本与生态兼容性。今天就从“为什么需要SIOV”到“SIOV到底强在哪”,再到“未来要解决什么问题”,做一次全方位深度拆解。

存储随笔 2552

2019icpc银川站总结

萌新第一站,先说结果——铜尾,有庆幸也有遗憾 day1 做了四个多小时的飞机,乘了两小时左右的大巴?,本以为可以报道了,结果被告知明天才开始报道???(上车前导游明明说可以今天报道),人傻了。打车回宾馆,晚上做了5题强连通分量的题,看了一下早上看见的超大背包方面的内容就睡着了(看着看着就睡着了。。。太累了,顶不住) day2(热身赛) 前面的不谈,下午两点多坐车到了宁夏理工学院,参加开幕式和热身赛...

Wa的博客 2331

Neo4j:入门基础(二)之导入CSV文件

导入CSV文件的方式  主要的两种方式如下:   1、使用 Cypher 命令LOAD CSV,这种方式可以处理中小型数据(可达10 million条记录)   2、使用批量导入工具neo4j-admin ,用来直接导入大数据集 三、上述方式具体导入过程   1、Cypher 命令LOAD CSV 参数 1、USING PERIODIC COMMIT 300 使用批量提交,每满300条提交一次,防止内存溢出 2、WITH HEADERS 从文件中读取第一行作为参数名,...

Puzzle的博客 3万+

TVS 管击穿电压与钳位电压的工程解析

TVS二极管的核心参数击穿电压(VBR)和钳位电压(VC)常被混淆,但二者具有本质区别。VBR是

硬核科技 477

2019ICPC银川现场赛总结

2019ICPC银川现场赛总结 队名:死亡发际线 队友: wudixixi Xiuchen Duskfire · 提早一天去就为了打热身赛,结果不小心下飞机的时候把电脑落下了,队友跟着我找了一个下午的电脑,到了晚上总算是悬着的心也掉下来了……真的是人傻了我是不是就不应该把电脑带出去 第二天热身赛是真的没意思,就签了个到就回去了,AC自动机不会。。。B题也算了好久交了几发WA就放弃了 正式赛的时候,...

想要一只银渐层 766

20、自定义用户窗体:从创建到使用

本文详细介绍了在Excel VBA中创建和使用自定义用户窗体的完整过程,涵盖从窗体设计、控件添加与属性设置,到事件处理程序编写及宏调用的各个环节。通过实际示例讲解了如何实现文本大小写转换和员工信息录入等功能,并深入解析了常用控件的属性与事件机制。同时提供了控件命名规范、快捷键使用、布局技巧等实用建议,帮助读者构建高效、交互性强的VBA用户界面。

h0i1j2k3l的博客 131

2019 ICPC银川 个人题解

title : 2019 ICPC银川 个人题解tags : ACM,题解,练习记录。

SC_Linno的博客 603

STM32入门教程:车牌识别

在本文中,我们介绍了如何使用STM32实现车牌识别功能,并提供了详细的代码案例。通过以上步骤,你可以开始开发自己的车牌识别系统了。希望本文对你有所帮助!

2401_85258012的博客 874

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

2019ICPC(银川) - Function!(数论+数学分块)

题目链接:点击查看 题目大意:给出公式,其中,则,现在给出n(<=1e12),求出答案对998244353取模后的答案 题目分析:若用暴力实现上述公式,只需要两层for循环,时间复杂度为n*n,也就是1e24。。所以我们需要想办法优化,其实上面的公式看着吓人,我们稍微化简一下: 这样看起来就亲切多了,再其实仔细观察一下就会发现,因为第二层循环的b是从a开始的,所以一定是大于零并且小...

Falcon的博客 784

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

2019 acm-icpc银川站F.Function!(数学分块)

给你一个式子∑a=2n(a∑b=an⌊fa−1(b)⌋⌈fb−1(a)⌉)\sum_{a=2}^n{\left( a \sum_{b=a}^n{\lfloor f_{a}^{-1}\left( b \right) \rfloor}\lceil f_{b}^{-1}\left( a \right) \rceil \right)}∑a=2n​(a∑b=an​⌊fa−1​(b)⌋⌈fb−1​(a)⌉)让...

pubgoso的博客 1464

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ICPC2019银川 K. Largest Common Submatrix

悬线法

ACoder 393

2019 ICPC 银川题解(A,H,L)

赛时没发挥好6题金尾(rank38),剩下很多能写的题,其中四个dp,傻眼ing。

梅子酒的博客 630

【题目记录】——ICPC银川2019

文章目录 题目集地址2019ICCPC银川

气派飞鹰的博客 1108
上一篇: 2020江西省赛A 莫比乌斯反演
下一篇: 洛谷P3807 lucas定理模板
stdforces
博客等级 码龄4年 9粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值