0
点赞
收藏
分享

微信扫一扫

CF1656D K-good题解

禾木瞎写 2022-03-25 阅读 51
c++学习

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

这题是真的水

直接根据题意列出式子:
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();
}
举报

相关推荐

CF 1656D K-good(思维)

D - K-good

D.K-good

A Good Bye 2014(CF)

CF672B Different is Good

CF366D Dima and Trap Graph 题解

0 条评论