题解
2025-08-11 22:55:52
发布于:浙江
5阅读
0回复
0点赞
思路:田忌赛马
经典二分题(当然也可以用双指针)
代码
# include <bits/stdc++.h>
typedef unsigned long long ull;
#define getchar getchar_unlocked()
#define psbc push_back
#define v vector
#define endl '\n'
#define be(x) x.begin(),x.end()
#define mkp make_pair
using namespace std ;
const int n = 1e5;
int i,j,k;
int r(){
int x = 0,f = 1;
char c = getchar;
while(c<'0'||c>'9'){if(c=='-') f = -1;c = getchar;}
while(c>='0'&&c<='9') x = (x<<1)+(x<<3)+(c^(3<<4)),c = getchar;
return x*f;
}
int main ( )
{
int n = r(),idx = 0;
v<int>arr(n),b(n);
for(i = 0;i<n;i++) arr[i] = r();
for(i = 0;i<n;i++) b[i] = r();
sort(be(b));
sort(be(arr));
int win = n,idx2 = 0;
for(auto i:arr){
int x = upper_bound(b.begin()+idx2,b.end(),i)-b.begin();
if(x==idx2) idx2++;
if(x>=n){
win--;
}
else if(b[x]<=i||!b[x]){
win--;
b[x] = 0;
}
else b[x] = 0;
}
if(win>n/2) cout<<"YES";
else cout<<"NO";
return 0;
}
这里空空如也
有帮助,赞一个