Codeforces I Will Definitely Make It
题目来源:Problem - 2126C - Codeforces




这道题其实很好理解,看题目就能想通具体思路,我这边简单说一下自己的理解:
首先再开一个数组b,将a数组排序后从索引k(排序前)代表的数组开始寻找比索引k大的元素,存入,并且保证b数组中没有重复的元素。
随后进行判断,定义两个变量q,p,两个变量要相差1,因为我们不能确保从当前下标一下子就可以跳到最大的元素,所以一个一个的移动,可以避免很多不必要或者没注意到的错误。当两个下标的差值大于b数组最小的元素,也就是题目中所说的x。大于x时也就意味着跳到下一个元素所需时间更长,此时就会被水淹没,那么直接输出no就可以。如果小于等于x,q与p分别加一,进行循环。如果最后跳到了最大的元素,输出yes,这一个样例就算结束。
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{int t;cin>>t;while(t--){int n,k;cin>>n>>k;vector<int>a(n);vector<int>b(n);for(int i=0;i<n;i++){cin>>a[i];}b[0]=a[k-1];sort(a.begin(),a.end());int l=1,flag=0;for(int i=0;i<n;i++){if(flag==1){if(b[l-1]!=a[i]){b[l]=a[i];l++;}}if(a[i]==b[0]){flag=1;}}int p=0,q=1;while(1){if(p==l-1){cout<<"YES"<<endl;break;}if(b[q]-b[p]>b[0]){cout<<"NO"<<endl;break;}else{p++,q++;}}}return 0;
}
