题目
题意
给出 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 a−1+b−1+c−1,就是把相同的字母放到一起。求最小值时,我们先假设 a < b < c a<b<c a<b<c,然后先放C,把A和B放到C中间(就是C_C_C…这种形式),最小值就是 c − 1 − a − b c-1-a-b c−1−a−b
代码
#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;
}