奇数の整数题のCF1327A和解

オリジナルタイトルリンク

質問の意味簡単に言えば:

データの複数のセットは、かどうかを尋ねた\(N- \)\(K \)番目の異なる正の奇数の和。

ブラインドは、結論の数学の問題を推測します。

限り、二つの問題が検討すると:

  1. \(N \)サイズが適切です。

  2. \(N \)パリティを満たしています。

最初のために\(1 \)ストリップ、最小\(K \)異なるの正の奇数合計\(K ^ 2 \) 。(それは知りません、初等数学を再学習を提案しています)

だから、\(N- \ GEQのk ^ 2 \)それが解けるかもしれません。

最初のため\(2 \)物品ため\(K \)正の奇数と(K \)\同じパリティの、それが満たされなければなりません。

\ [N \当量のK \ PMOD 2 \]

ソリューション、または全く解決策である2つの会います。

なぜ?

分割を検討します。

\ [1 + 3 + 5 + ... +(2K-3)+ P = N \]

すなわち、前に\(K-1 \)正の奇数プラス別の奇数。

もし\(N- \) 2を満足しつつ、それは分割があることは明らかであり、そして(\ KタイムズP \ GEQ 2 - 1 \)\、何繰り返しが存在しません。

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

inline ll read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}
	ll x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;}

int main(){
	ll T=read(),n,k; while(T--) {
		n=read(),k=read();
		if(n<k*k || (n-k)&1) puts("NO");
		else puts("YES");
	} //别忘了,k*k会爆int,开上 long long
	return 0;
}

おすすめ

転載: www.cnblogs.com/bifanwen/p/12557524.html