CF1656D K-good题解

阅读 65

2022-03-25

这场比赛我没打,错失上分好机会

这题是真的水

直接根据题意列出式子:
n = k ( k − 1 + 2 t ) 2 n=\frac{k(k-1+2t)}{2} n=2k(k1+2t) 其中 t t t 为正整数

稍微变一下形:
2 n = k ( k + 1 + 2 s ) 2n=k(k+1+2s) 2n=k(k+1+2s) 其中 s s s 为自然数

于是就变成了将 2 n 2n 2n 分为两个奇偶不同的数的乘积,我们只要把 2 n 2n 2n 里所有的 2 2 2 拿出来就行了,然后把两个值取一个最小值就是 k k k 了,其中 k ≠ 1 k\neq1 k=1

于是就有了代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve(){
	int n,a,b;
	cin>>n;
	n*=2;
	a=1,b=n;
	while(b%2==0)b/=2,a*=2;
	if(b==1)cout<<"-1\n";
	else cout<<min(a,b)<<"\n";
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)solve();
}

精彩评论(0)

0 0 举报