CF1327A Sum of Odd Integers 題解

博客園同步

原題鏈接

簡要題意:

多組數據,問能否把 nn 分爲 kk不同的 正奇數之和。

盲猜數學結論題。

只要考慮兩個問題:

  1. nn 的大小是否足夠。

  2. nn 的奇偶性是否滿足。

對於第 11 條,最小的 kk不同的 正奇數之和爲 k2k^2.(這都不知道,建議重學小學數學)

所以,nk2n \geq k^2 纔可能有解。

對於第 22 條,因爲 kk 個正奇數與 kk 的奇偶性相同,所以必須滿足:

nk(mod2)n \equiv k \pmod 2

這兩條同時滿足即有解,否則無解。

爲什麼呢?

考慮一種拆分:

1+3+5+...+(2k3)+p=n1 + 3 + 5 + ... + (2k-3) + p = n

即前 k1k-1 個正奇數加上另一個奇數。

如果 nn 同時滿足上兩條,則顯然存在這樣的拆分,且 p2×k1p \geq 2 \times k - 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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章