Codeforces Round #372 (Div. 2)
Codeforces Round #372 (Div. 2)
C. Plus and Square Root
题意
- 一个游戏中,有一个数字x,当前游戏等级为k,有两种操作:
- '+'按钮:使得x=x+k
- '√'按钮:使得x=√x,此时x必须是平方数,游戏等级加1,即k=k+1,且√x是k+1的倍数。
- 游戏开始时,x=2,k=1,输出n(n≤105)个数,表示每个等级对应的xk值(就是倍数),并且输出的值不超过1018。
- 任意时刻,x必须是k的倍数。
Additionally, after each move, if ZS the Coder is at level k, and the number on the screen is m, then m must be a multiple of k.
思路
- 设$$x=kp=(k+1)2q2$$
- 则$$p=\frac{(k+1)2q2}{k}$$
如果令q=k,得p=k(k+1)2
这样的倍数显然满足题意。
代码
D. Complete The Graph
题意
- 一张图有n(n≤103)个点,m(m≤104)条边。
- 每条边有权值(均为正整数),当边权为0时,表示需要重新赋值,使得s→t的最短路径长为L(L≤109)。
- 若存在一种方案,输出"YES"和所有边的边权;否则输出"NO"。
思路
- 是否存在可以通过极端情况判断,即将所有0边赋值为1以及全赋值为L。
- 若存在,显然可以二分出权值x,使得所有0边均赋值为x时,s→t的最短路刚好大于或等于L。
- 此时我们可以通过将某些边从x变成x−1使得最短路变成L,这样的时间复杂度为O(NMlogN),是可以解决的。
- 题解提到了一种复杂度更优的做法,大概思想是二分找到第一条0边,使得最短路小于L,找到后再二分该边的权值,使得最短路刚好为L。
代码
E. Digit Tree
题意
- 给一棵树,有n(n≤105)个点。
- 边有权值wi(1≤wi≤9)。
- 求路径(u,v)使得u→v路径构成的大数模m为0,其中gcd(10,m)=1。
思路
- 点分治
- 根据欧拉定理x^{\phi{(m)}}\equiv 1(mod \verb' 'm), gcd(x, m)=1可以求出10的逆元。
代码
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)