首页 > 其他分享 >CF1846E2 Rudolf and Snowflakes (hard version) 题解

CF1846E2 Rudolf and Snowflakes (hard version) 题解

时间:2023-11-29 23:12:01浏览次数:45  
标签:10 le frac Snowflakes 题解 hard ge depth 18

题意:

\(T\) \((\)\(1\) \(\le\) \(T\) \(\le\) \(10^4\)\()\) 组询问:是否存在一个满 \(k\) (\(k\) \(\ge\) \(2\)\()\) 叉树节点数恰好为 \(n\) \((\)\(1\) \(\le\) \(n\) \(\le\) \(10^{18}\)\()\),且深度 \(depth\) 至少为 \(2\) 。

思路:

满 $ k $ 叉树的节点数 $ n = k^0 + k^1 + k^2 + ... + k^{depth} = \frac {k^{depth + 1} - 1} {k - 1} $ 。

观察,当 $ k > 10^6,depth > 2 $ 时, $ n = \frac {k^{depth + 1} - 1} {k - 1} > 10^{18} $ ,因此当 $ k > 10^6 $ 时,其可行的 $ depth $ 一定为 $ 2 $ 。因此考虑数据分治

对于$ k \in [2,10^6] $ ,枚举 $ k $ 和 $ depth $ ,在 $ \frac {k^{depth + 1} - 1} {k - 1} $ 不超过 $ 10^{18} $ 的情况下,将可行结果 $ n $ 记录在 $ set $ 里面。

由于 $ (k - 1) / (k - 1) = 1 $ , $ (k^2 - 1) / (k - 1) = k + 1,(k^3 - 1) / (k - 1) = k^2 + k + 1 $ ,可以证明对于任意 $ k^x(x \ge 4) $ ,均有:

$ \frac {k^x - 1} {k - 1} = \frac {(k^3 - 1) * k^{x - 3} + (k^{x - 3} - 1)} {k - 1} = \frac {(k^3 - 1) * k^{x - 3}} {k - 1} + \frac {k^{x - 3} - 1} {k - 1} = (k^2 + k + 1) + \frac {k^{x - 3} - 1} {k - 1} $

对于 $ k^{x - 3} $ ,当 $ x - 3 \ge 4 $ 时,重复以上过程;当 $ 1 \le x - 3 \le 3 $ 时, $ k^{x - 3} - 1 $ 一定为整数。因此,对于任意 $ k^x(x \ge 1) $ ,均有 $ (k^x - 1) $ $ \bmod $ $ (k - 1) = 0 $ 。

由于 $ 2^{60} > 10^{18} $ ,那么对于枚举 $ k $ 和 $ depth $ ,求解 $ \frac {k^{depth + 1} - 1} {k - 1} $ 时,最多产生不超过 $ 10^6 * 70 $ 个结果,因此对 $ set $ 查询可行结果 $ n $ 时,不会超时。

对于 $ k \in [10^6 + 1,10^9 + 10] $ ,由于 $ depth = 2 $ ,则可行结果 $ n = k^2 + k + 1 $ 在 $ k \in [10^6 + 1,10^9 + 10] $ 上单调递增,因此可以二分查找可行结果 $ n $ 。

标签:10,le,frac,Snowflakes,题解,hard,ge,depth,18
From: https://www.cnblogs.com/ShawyYum/p/17866152.html

相关文章

  • luogu2839题解
    [国家集训队]middle题目分析代码如下。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;constintMAXN=2e4+10;intx,n,Q,a[MAXN],q[6],root[MAXN],b[MAXN],tot;vector<int>locp[MAXN];structSegmentTreeNode{......
  • CF1827C Palindrome Partition 题解
    题目链接点击打开链接题目解法首先考虑一个朴素的\(dp\)令\(f_i\)表示以\(i\)结尾的合法子串的个数为了不重不漏,我们令\(le_i\)表示以\(i\)为右端点,离\(i\)最近的偶回文串的左端点,然后不难得到转移为\(f_i=f_{le_i-1}+1\)为什么不会漏?考虑以\(i\)为右端点,且比......
  • NOIP2000提高组真题解析
    NOIP2000提高组真题解析第一题进制转换题目链接解析首先,我们知道对于10进制数x转2进制数,使用的算法是:求出x%2令x=x/2不断执行1,2,直至x为0,然后倒序输出步骤1的结果。一般可以用数组存步骤1的结果倒序输出或者使用dfs回溯回来再输出。对于负数的情况,比如\(-7=1*(-2)^3......
  • D2. Xor-Subsequence (hard version)
    D2.Xor-Subsequence(hardversion)Itisthehardversionoftheproblem.Theonlydifferenceisthatinthisversion$a_i\le10^9$.Youaregivenanarrayof$n$integers$a_0,a_1,a_2,\ldotsa_{n-1}$.Bryapwantstofindthelongestbeautifulsub......
  • ISCTF 逆向题解
    ISCTF逆向题解用一个晚上的时间看了看ISCTF,有的题还蛮难的(毕竟得嘎嘎猜出题人想法)CrackMewinhex打开exe,修改标识头PFX为UPX然后放进UPXshell里面试试脱了,放进ida,直接反编译得到flagEasyReexeinfo看看这个是什么64位,放进ida反编译得到一段很清晰的逻辑反转+异或+单表代换。。。......
  • ICPC2022Xian L Tree 题解
    LinkICPC2022XianLTreeQuestion给出一个根为\(1\)的树,需要将树分成几个块每个块,一个块中的节点需要满足以下条件中的一个:对于所有的\(u,v\inS,\u\neqv\),满足\(u\insubtree(v)\)或\(v\insubtree(u)\)对于所有的\(u,v\inS,\u\neqv\),满足\(u\not......
  • [ABC277G] Random Walk to Millionaire 题解
    题目链接点击打开链接题目解法首先\(O(n^3)\)的\(dp\)是显然的,令\(f_{i,j,k}\)为第\(i\)步在\(j\),当前等级为\(k\)的\([i,n]\)步获得钱数的期望,转移枚举出边即可一个很妙的优化是:贡献都是\(k^2\)的形式,所以我们考虑维护\(k\)的\(0,1,2\)次幂,即\(\sum,\sum......
  • CF1900D - Small GCD 题解
    1900D-SmallGCD给定序列\(A\),定义\(f(a,b,c)\)为\(a,b,c\)中最小的次小的数的\(\gcd\),求:\[\sum_{i=1}^n\sum_{j=i+1}^n\sum_{k=j+1}^nf(a_i,a_j,a_k)\]题解目前来说有两种方法,都十分有启发意义,但是有共同的开头。考虑到\(A\)的顺序实际上没有......
  • SP19543 GSS8 - Can you answer these queries VIII 题解
    更好的阅读体验SP19543GSS8-CanyouanswerthesequeriesVIIIfhq+二项式定理。提供一个不太一样的思路。默认下标从\(1\)开始。首先插入删除,区间查询,想到可以平衡树维护或者离线下来做线段树。本文中是用的是fhq,好写一些。\(k\)非常的小,考虑对于每一个\(k\)的答......
  • 服务器数据库A的备份恢复到服务器B后出现问题解决
    消息10314,级别16,状态11,第2行尝试加载程序集ID65536时,Microsoft.NETFramework出错。服务器可能资源不足,或者程序集可能不受信任,PERMISSION_SET=EXTERNAL_ACCESS或UNSAFE。如上错误提示,解决办法: alterdatabasedatabasenamesettrustworthyon还有更改数据库......