贪心刷题-001 Dress’em in Vests!
题目
我的思路:
将ai和bi都排序,然后从ai小的开始依次遍历,每次判断bj是否满足条件,记录满足条件的最小下标j。只对了4个测试,啥也不是,我还想是不是溢出了全部换成了long,没用
#include <iostream>
#include <algorithm>
using namespace std;
struct people{
long long num;
long long size;
long long s;
long long e;
long long min;
long long flag;
};
struct clothes{
long long size;
long long num;
long long flag;
};
bool cmp(clothes a,clothes b){
return a.size<b.size;
}
bool cmp1(people a,people b){
return a.size<b.size;
}
int main(){
long long n,m,x,y;
cin>>n>>m>>x>>y;
people peo[n];
for(long long i=0;i<n;i++){
cin>>peo[i].size;
peo[i].num=i+1;
peo[i].s=peo[i].size-x;
peo[i].e=peo[i].size+y;
peo[i].flag=0;
}
sort(peo,peo+n,cmp1);
clothes clo[m];
for(long long i=0;i<m;i++){
cin>>clo[i].size;
clo[i].num=i+1;
clo[i].flag=1;
}
sort(clo,clo+m,cmp);
long long k=0;
for(long long i=0;i<n;i++){
for(long long j=0;j<m;j++){
if(clo[j].flag==1&&peo[i].s<=clo[j].size&&peo[i].e>=clo[j].size){
peo[i].min=clo[j].num;
clo[j].flag=0;
k++;
peo[i].flag=1;
break;
}
}
}
cout<<k<<endl;
for(long long i=0;i<n;i++){
if(peo[i].flag==1){
cout<<peo[i].num<<" "<<peo[i].min<<endl;
}
}
return 0;
}