社交距离 - CodeForces 1668B - 虚拟裁判 (csgrandeur.cn)
题意:n个人,给定围成圈的m个座位,有n个人入座,每个人的座位两边都需要空出来a[i]个座位,问能否满足
思路:排序,拆分圆为一个一条直线,一个满足条件的序列应该这样满足:将每个空隙的椅子数和占空位的椅子数加起来<m
code
#include<bits/stdc++.h>
#define x first
#define y second
#define mak make_pair
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define debug(a) cout<<a<<'\n'
#define endl '\n'
#define umap unordered_map
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;
const int N=2e5+10,M=1,inf=0x3f3f3f3f,mod=1e9+7;
int t,n,m;
int a[N];
void solve()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
if(n>m)
{
cout<<"NO"<<endl;
return;
}
sort(a+1,a+n+1);
LL sum=0;
for(int i=2;i<=n;i++) sum+=a[i];
sum+=a[n]+n;
if(sum>m) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
int main()
{
IOS;
cin>>t;
while(t--) solve();
return 0;
}