B. Combinatorics Homework1000 / 思维

Posted 幽殇默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. Combinatorics Homework1000 / 思维相关的知识,希望对你有一定的参考价值。


https://codeforces.com/contest/1574/problem/B
求一下可以凑出来的上下边界。
看m在不在区间里即可。
最大边界就是相同的都连在一块 即 a1-1+a2-1+a3-1
最小的边界就是 让最多的字符和其它的字符俩俩配对,这样就可以依次打乱,最后剩下的-1就是最小边界。

#include<bitsdc++.h>
using namespace std;
typedef long long int LL;
typedef pair<int,int> PII;
bool cmp(LL a,LL b) {return a>b;}
int main(void)
{
	int t; cin>>t;
	while(t--) 
	{
		LL a[3],m;
		cin>>a[0]>>a[1]>>a[2]>>m;
		sort(a,a+3,cmp);
		int cnt2=a[0]+a[1]+a[2]-3;
		int cnt1=a[0]-a[1]-a[2]-1;
		if(cnt2>=m&&cnt1<=m) puts("YES");
		else puts("NO");
	}
	return 0;
}

以上是关于B. Combinatorics Homework1000 / 思维的主要内容,如果未能解决你的问题,请参考以下文章

SE_homework1(第一部分)

Google Maps API v3 Combinatorics:多人、多地点的最短路线

Combinatorics 组合数学 模板

Codefoces 382E Ksenia and Combinatorics - 动态规划

Hackerrank manasa-and-combinatorics(数学推导)

在N个元素的数组中获取K个元素的所有组合问题