首页 > 其他分享 >CF1656D K-good 题解

CF1656D K-good 题解

时间:2023-08-19 20:33:48浏览次数:32  
标签:good 2p 奇数 cdot 题解 CF1656D 偶数 le aligned

CF1656D K-good 题解

题目大意

给出 \(t\) 个整数 \(n\),对于每一个 \(n\) 找出一个大于等于 \(2\) 的整数 \(k\),使得 \(n\) 可以表示成 \(k\) 个mod \(k\) 的结果互不相同的正整数之和。

\(1 \le t \le 10^5, 2 \le n \le 10^{18}\)。

题解

我们先将题意再次化简,可以得到,我们实际上就是要找一个 \(k\),使得 \(n = p \cdot k + \frac{k(k + 1)}{2}\)(\(p\) 为非负整数)。

我们通过观察可以发现,\(n\) 为奇数还是偶数,与它的性质和最终答案有直接联系,所以我们分情况讨论。

\(n\) 为奇数

当 \(n\) 为奇数时,我们不难发现,只要令 \(k = 2\) 就可以满足条件。因为任意一个奇数都能写成 \(2p + 1\) 即 \(2 \cdot p + \frac{1 \times 2}{2}\) 的形式。所以对于 \(n\) 为奇数的情况,直接输出 \(2\) 即可。

\(n\) 为偶数

当 \(n\) 为偶数时,我们可以将 \(n\) 换一种写法,写作 \(x \cdot 2^y\)(\(x\) 为奇数,\(y\) 为正整数)。

可是我们为什么要这么写呢?这么写有什么用呢?

其实,在瞪眼观察法 摆烂分神法 后,我们可以非常容易地明白:这个题奇数与偶数的解决方法不太一样,所以这就是我们的切入点。而 \(x \cdot 2^y\) 就很好地将一个数的奇数与偶数部分分开了。那么我们利用这个式子继续往下走:

\[\begin{aligned} n &= p \cdot k + \frac{k(k + 1)}{2}\\ x \cdot 2^y &= p \cdot k + \frac{k(k + 1)}{2}\\ x \cdot 2^{y + 1} &= 2p \cdot k + k(k + 1)\\ x \cdot 2^{y + 1} &= k(2p + k + 1)\\ \end{aligned}\]

到了这里,我们就可以继续利用奇偶数分情况讨论的方法,进一步进行化简:

当 \(k = x\) 时:

\[\begin{aligned} x \cdot 2^{y + 1} &= x(2p + x + 1)\\ 2^{y + 1} &= 2p + x + 1\\ \end{aligned}\]

因为 \(x\) 为奇数,所以 \(x + 1\) 为偶数,又因为 \(2p\) 为偶数,所以只要保证 \(x + 1 \le 2^{y + 1}\),就一定有 \(2p + x + 1 = 2^{y + 1}\) 。此时我们的 \(k = x\),也就是说只要 \(x \le 2^{y + 1}\) ,答案就是 \(x\)。

当 \(k = 2^{y + 1}\) 时:

\[\begin{aligned} x \cdot 2^{y + 1} &= 2^{y + 1}(2p + 2^{y + 1} + 1)\\ x &= 2p + 2^{y + 1} + 1\\ \end{aligned}\]

因为 \(2^{y + 1}\) 为偶数,所以 \(2^{y + 1} + 1\) 为奇数,又因为 \(2p\) 为偶数,所以只要保证 \(2^{y + 1} \le x\),就一定有 \(2p + 2^{y + 1} + 1 = x\)。此时我们的 \(k = 2^{y + 1}\),也就是说只要 \(2^{y + 1} \le x\),答案就是 \(2^{y + 1}\)。

综上所述:

答案就是 \(x\) 与 \(2^{y + 1}\) 中的较小值。所以我们对于每一个 \(n\),可以在 \(O(1)\) 的时间复杂度里计算出它的答案。怎么求呢?

\[\begin{aligned} 2^y &= lowbit(x) = x \& (-x) \\ 2^{y + 1} &= 2 \cdot lowbit(x) \\ x &= \frac{n}{2^y} = \frac{n}{lowbit(x)} \\ \end{aligned}\]

所以答案就是 \(min(2 \cdot lowbit(x), \frac{n}{lowbit(x)})\)。

可是如果你就这样交上去,会喜提一个 \(WA\)。

为什么呢?

注意题里所说的 \(k >= 2\),所以你还需要特判一下 \(min = 1\) 的情况,并输出 \(-1\),这样就能愉快地 \(AC\) 啦。

代码

这么简单的题还要看代码吗?就只有20行自己写写吧 \(QWQ\)
#include <bits/stdc++.h>
#define int long long

using namespace std;

int T, n;

signed main() {
    ios::sync_with_stdio(0);
    cin >> T;
    for(int i = 1; i <= T; ++ i) {
        cin >> n;
        if((n & 1) == 1)
            cout << 2 << '\n';
        else {
            int lowbit = n & (-n), minn = min(lowbit * 2, n / lowbit);
            if(minn != 1) cout << minn << "\n";
            else cout << "-1\n";
        }
    }
}

标签:good,2p,奇数,cdot,题解,CF1656D,偶数,le,aligned
From: https://www.cnblogs.com/Meteor-streaking/p/17643048.html

相关文章

  • P9571 Horizon Blue 题解
    P9571HorizonBlue题解这个题拿平衡树写是不是小题大做了咳咳咳进入正题。首先转化一下题意。第一个操作是加入直线,第二个操作就是求所有斜率不等于\(k\)的直线的数量,第三个操作就是删掉所有斜率不等于\(k\)的和所有与该直线重合的直线。感觉这题完全就是FHQ_Treap的......
  • P9572 Colorful Days♪ 题解
    原题链接题目大意:有两个数组\(S\),\(T\),你可以把\(S\)进行复制并接到其后面形成\(S^k\),如\(S\)=123,则\(S^2\)=123123,\(S^3\)=123123123。让你求出\(S^k\)与\(T\)的最长公共子序列以及在最长公共子序列最长时\(k\)的最小值。首先思考如果无视\(k\)最小的要求,最......
  • P4197 Peaks 题解
    P4197Peaks题解题目描述在Bytemountains有\(n\)座山峰,每座山峰有他的高度\(h_i\)。有些山峰之间有双向道路相连,共\(m\)条路径,每条路径有一个困难值,这个值越大表示越难走。现在有\(q\)组询问,每组询问询问从点\(v\)开始只经过困难值小于等于\(x\)的路径所能到达的......
  • P9571 Horizon Blue 题解
    原题链接题目大意:\(有三个操作,分别为\)\(操作1加入一条直线\)\(操作2查询与一条直线相交但不重合的直线条数\)\(操作3删除所有与一条直线相交或重合的直线\)\(注意:后面两个操作的直线并不需要加入\)\(显然,两条直线相交不重合,当且仅当其k值不同\)\(所以可以把所有直线按k......
  • 寻宝 题解
    寻宝题目大意存在\(n\)个点和两种有向边:一类边分\(m\)组,每组的边权相同,从\([s_l,s_r]\)中的所有点连向\([t_l,t_r]\)中的所有点。二类边存在于任意两点\(i,j\)间,从\(i\)连向\(j\)的二类边的边权为\(|i-j|\timesa_i\)。求从点\(1\)到\(n\)的最短路......
  • P9425 [蓝桥杯 2023 国 B] AB 路线 题解
    ~~应该能过官方数据吧~~---回归正题。我开始想过更简单的深搜,但是我怕无法记忆化,所以选择了广搜。和普通的广搜不同,此题的队列要存$3$个维度,分别是$x$,$y$,$z$,分别表示横坐标、纵坐标、目前的步数模$2k$的值。此时我们可以把每$2k$步进行分组,前$k$步走在```A```的格子......
  • 洛谷P5410 【模板】扩展 KMP(Z 函数)题解
    题目链接P5410【模板】扩展KMP(Z函数)-洛谷|计算机科学教育新生态(luogu.com.cn) 分析先考虑z数组设nx[i]为字符串b与b以b[i]开头的后缀最长公共前缀设i为当前需要求的位置当前i+nx[i]-1的最大值所对应的i为q p为i对应的位置当i大于q+nx[q......
  • arc139,arc140,arc141题解
    ARC139A-DATrailingZeros憨的。BMakeN感觉没有那么naive。首先用\(1\)去更新一下后面两个决策的价值。然后有一个较为显然的东西是说\(\text{lcm}\)为周期,周期内应该贪心取最大的。周期外由于范围很小,可以直接枚举一种决策的次数,取最小值即可。复杂度是正确的。CO......
  • Luogu P9510 『STA - R3』高维立方体 题解
    题目传送门没见过这玩意,写个题解记下。题目大意周知斐波那契数列定义为:\[\operatorname{fib}(n)=\left\{\begin{aligned}1&&n\le2\\\operatorname{fib}(n-1)+\operatorname{fib}(n-2)&&n>2\end{aligned}\right.\]然后定义(\(n\le0\)函数值为\(0\))\[f(n)......
  • CF-1860C Game on Permutation题解
    题意:在一条数轴上,Alice可以跳到在你所在点前面且值比当前所在点小的点。每回合可以向任意符合要求的点跳一次。当轮到Alice的回合同时不存在符合要求的点,Alice就赢了。Alice可以选择一个点作为起始点,然后作为后手(赛时这里把我坑了)。问有多少个点是必胜的点。\(n\leq3\times10^5......