CT03 Contest#10 equation 大力打表+讨论
好久没做这么爽的打表题了!!
当然,这个讨论要人命。
代码:10KB讨论 + 3KB 表
注:附有打表代码
题意
求 的解数。,要求 。 给定。
做法
注:一个快一点的暴力
假设已知 ,可以枚举一个 ,并设一个 ,初始等于 。随着 的增加,单调的减少这个 即可。这样复杂度是不带 的。
以下说跑的暴力,以及打表程序,都是这个写法
考虑枚举 。由于 ,这个 就只有最多1e6种了。
再枚举 。讨论:
若 d=1
答案是 ,显然
若 d=2
用HAOI那个圆上的整点那个题的结论,分解质因数做,就行
先把1e6以内的数的最小质因子筛出来,然后每次分解就是 的了。
若 d=3
如果 ,由费大,无解
如果 ,脑袋一想,好像解不多。搞一个打表程序一算,诶,只有 600 个解不到。打表!(打表程序注意常数优化,我的跑了5~10min左右)
如果 ,脑袋一想,好像解也不多(有了刚才的经验)。于是继续打表
如果 ,由费大,无解
其实如果 ,就一定无解,因为我们可以把 次方看成是先求 次方,再求 次方;这样两边都是 次方,就肯定无解
如果 ,继续打表,这个表小到可以直接用 or
语句来判。 同理。
由上结论, 均无解。
如果 ,易发现,只有一个解。随便写几个if搞搞也行
对于更大的 ,跑暴力的复杂度就小的可怜了。,再乘 也不是问题
注:其实也有点慢,所以后来我代码里增加了对 的特殊待遇,使得它后来跑的飞快
若 d=4
如果 ,只有五个解,拿 or
语句判一下
如果 , 无解
如果 ,打表 —— 后来才发现这个表大小只有
如果 ,无解 (搜出来)
剩下暴力,复杂度:
毛估估,7e6左右。实际上常数更小。
其实我们可以得到一个比较general的式子,对于d,e,复杂度是
若 d=5
如果 ,同样打表
如果 ,搜一下发现无解
如果 ,无解
如果 ,一看只有 个解,判一下即可
剩下暴力。
复杂度是 ,更小
注意到这个东西随着 的增大是单减的
若 d=6
就像上面的一样,要打表就打表,复杂度够了就暴力,一直搞到8,9左右
...
若d>=10
直接暴力,飞快
注意点
打表程序:要用一下上面那个小trick
注意double的精度(如果用pow开根),或者手写二分开根
注意不要爆long long
(我是因为这两条,考场只有90)
考场调这种题,要冷静,合理分配时间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】