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;
}

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