0
点赞
收藏
分享

微信扫一扫

D.K-good

ZMXQQ233 2022-03-25 阅读 68

https://codeforces.com/contest/1656/problem/D
看n是否是让k个数分别%k的和,输出任意符合的k
构造题
n=(1+k)k/2+mk(m>=0)
2
n=(1+k)k+2mk
2
n=k(2m+k+1)

k是奇数的话,2m+k+1就是偶数
k是偶数的话,2
m+k+1就是奇数
也就是构造把2*n分解成奇数和偶数乘积

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        ll n;
        scanf("%lld",&n);
        ll te=1;
        while(n%2==0)
        {
            n/=2;
            te*=2;
        }
        if(n==1)//是2的n次方,没法分成奇数和偶数的乘积
            printf("-1\n");
        else
            printf("%lld\n",min(2*te,n));
    }
}

举报

相关推荐

D - K-good

CF1656D K-good题解

CF 1656D K-good(思维)

D. a-Good String(分治

good luck

0 条评论