2019浙大校赛--A--Thanks, TuSimple!(简单模拟题)

时间:2021-03-19 16:49:24

这题前三段都是一堆吹爆赞助商的屁话,正式题目在图片下边,一个简单模拟题。

2019浙大校赛--A--Thanks, TuSimple!(简单模拟题)

题目大意:

有n个男生,m个女生在进行舞会,其中一部分男生祥和比自己矮的女生跳舞,一部分男生想和比自己高的女生跳舞,一部分女生想和比自己高的男生跳舞,一部分女生想和比自己矮的男生跳舞;

所以,我们可以这样配对:想跟比自己矮的女生跳舞的男生——想跟比自己高的男生跳舞的女生;想跟比自己高的女生跳舞的男生——想跟比自己矮的男生跳舞的女生。

分组,排序,扫描配对,完事。(不过比赛中某人把代码里的n,m搞错了,从开头debug到封榜才找到bug)

代码如下:

 #include<iostream>
#include<algorithm>
#include<memory.h>
#include<stdio.h>
#define max 1000005
using namespace std;
long long int man[max],woman[max],a1[max],a2[max],b1[max],b2[max];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m,x=,y=,j=,k=,ans=;
bool vis;
memset(man,,sizeof(man));
memset(woman,,sizeof(woman));
memset(a1,,sizeof(a1));
memset(a2,,sizeof(a2));
memset(b1,,sizeof(b1));
memset(b2,,sizeof(b2));
scanf("%d %d",&n,&m);
for(int i=;i<n;i++){
scanf("%lld",&man[i]);
}
for(int i=;i<m;i++){
scanf("%lld",&woman[i]);
}
for(int i=;i<n;i++){
cin>>vis;
if(vis){
a1[j]=man[i];
j++;
}
else{
a2[k]=man[i];
k++;
}
}
for(int i=;i<m;i++){
cin>>vis;
if(vis){
b1[x]=woman[i];
x++;
}
else{
b2[y]=woman[i];
y++;
}
}
sort(a1,a1+j);
sort(a2,a2+k);
sort(b1,b1+x);
sort(b2,b2+y);
for(int i=,z=;i<j;i++){
while(a1[i]>b2[z]&&z<y){
z++;
}
if(z>=y){
break;
}
ans++;
z++;
}
for(int i=,z=;i<x;i++){
while(b1[i]>a2[z]&&z<k){
z++;
}
if(z>=k){
break;
}
ans++;
z++;
}
printf("%d\n",ans);
}
}