专栏文章

题解:P9218 「TAOI-1」Apollo

P9218题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minouu8t
此快照首次捕获于
2025/12/02 05:56
3 个月前
此快照最后确认于
2025/12/02 05:56
3 个月前
查看原文
如果你看懂了题目,你会发现 f(a)f(a) 其实就代表 aa 的小数位数。
g(x,y)g(x,y) 怎么求呢?
显然,如果 xxyy 之间有整数,也就是它们的整数部分不同。如果整数部分相同,那么如果第一位小数不同,则答案为 11。如果整数和第一位小数都相同,但是第二位小数不同,则答案为 22,以此类推。
但是上面的讨论是有问题的:实际上,如果 xxyy 的某一位小数相同(前面也相同),但是某个数字后面没有小数位了,则由于区间是闭区间所以包括 xxyy,答案就是 f(x)f(x)f(y)f(y),但是根据上述讨论需要继续往后看直到 yy 的某一位不为 00。做法也很简单,因为要满足这样的条件必须 xxyy 转化为字符串后一个是另一个的前缀。
等等,前缀?我们在讨论数学为什么要看这个。实际上,如果把 x,yx,y 都转化为字符串并令两个字符串的最后一个字符不和任何字符相同,则 gg 函数值就是:
  • 它们整数部分不同:00
  • 否则:它们的第一个不同的位置。
我草我怎么写得这么像 AI,坏了。
如何把这个讨厌的整数部分的检测去掉呢?非常简单,因为贡献是 00 所以可以不算,事先对所有数字分组,整数部分相同的分到同一组,组内统计即可。组间答案是 00 的。
那么,假设整数部分相同,如何统计答案呢?
这就是一个串串题了。Trie 树板子题,建出 Trie 树后求一个节点和其它所有节点的 LCA 深度之和。在每个节点上标记子树中有多少个字符串即可。

评论

0 条评论,欢迎与作者交流。

正在加载评论...