1574 B. Combinatorics Homework

题目

在这里插入图片描述

题意

给出 a a a个A, b b b个B, c c c个C,问是否有 m m m对相邻位置相等的字母(即第 i i i个位置上和第 i + 1 i+1 i+1个位置上字母相同)

思路

先找最大值,很简单的就可以找到是 a − 1 + b − 1 + c − 1 a-1+b-1+c-1 a1+b1+c1,就是把相同的字母放到一起。求最小值时,我们先假设 a < b < c a<b<c a<b<c,然后先放C,把A和B放到C中间(就是C_C_C…这种形式),最小值就是 c − 1 − a − b c-1-a-b c1ab

代码

#include<iostream>
#include<string>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#define BUFF ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int MOD = 2333;
const int INF = 0x3f3f3f3f;
const int N = 5e3 + 3;
typedef long long ll;

void work() {
	int a[3];
	cin >> a[0] >> a[1] >> a[2];
	int m; cin >> m;
	sort(a, a + 3);
	int l = a[2] - 1 - (a[0] + a[1]);
	int r = a[0] + a[1] + a[2] - 3;
	cout << ((m >= l && m <= r) ? "YES" : "NO") << endl;
}

int main() {
	BUFF;
	int T; cin >> T;
	while (T--)
		work();
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值