Replacing Elements

131 篇文章 0 订阅

Replacing Elements

CodeForces - 1473A

You have an array a1,a2,…,an. All ai are positive integers.

In one step you can choose three distinct indices i, j, and k (i≠j; i≠k; j≠k) and assign the sum of aj and ak to ai, i. e. make ai=aj+ak.

Can you make all ai lower or equal to d using the operation above any number of times (possibly, zero)?

Input
The first line contains a single integer t (1≤t≤2000) — the number of test cases.

The first line of each test case contains two integers n and d (3≤n≤100; 1≤d≤100) — the number of elements in the array a and the value d.

The second line contains n integers a1,a2,…,an (1≤ai≤100) — the array a.

Output
For each test case, print YES, if it’s possible to make all elements ai less or equal than d using the operation above. Otherwise, print NO.

You may print each letter in any case (for example, YES, Yes, yes, yEs will all be recognized as positive answer).

Example
Input
3
5 3
2 3 2 5 4
3 4
2 4 4
5 4
2 1 5 3 6
Output
NO
YES
YES
Note
In the first test case, we can prove that we can’t make all ai≤3.

In the second test case, all ai are already less or equal than d=4.

In the third test case, we can, for example, choose i=5, j=1, k=2 and make a5=a1+a2=2+1=3. Array a will become [2,1,5,3,3].

After that we can make a3=a5+a2=3+1=4. Array will become [2,1,4,3,3] and all elements are less or equal than d=4.

题解

直接找出最小的两个,判断是否<=d就行,还有一种情况是最小的两个>d但是所有都<=d

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
	ll n,q,d;
	ll cb[1000],cb2[1000];
	cin>>n;
	for(ll i=1 ; i<=n ; i++){
		memset(cb2,0,sizeof(cb2));
		cin>>q>>d;
		for(ll j=1 ; j<=q ; j++){
			cin>>cb[j];
		}
		int cnt = 0;
		for(ll j=1 ; j<=q ; j++){
			for(ll k=j+1 ; k<=q ; k++){
				if(cb[j]+cb[k] <= d){
					cnt = 1;
					break;
				}
			}
		}
		if(cnt == 0){
			int qq = 1;
			for(ll j=1 ; j<=q ; j++){
				if(cb[j]>d){
					qq = 0;
				}
			}
			if(qq){
				cnt = 1;
			}
		}
		if(cnt == 1){
			cout<<"YES\n";
		}else{
			cout<<"NO\n";
		}
	}
 } 
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值