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

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

题目大意:

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

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

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

代码如下:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<memory.h>
 4 #include<stdio.h>
 5 #define max 1000005
 6 using namespace std;
 7 long long int man[max],woman[max],a1[max],a2[max],b1[max],b2[max];
 8 int main(){
 9     int t;
10     scanf("%d",&t);
11     while(t--){
12         int n,m,x=0,y=0,j=0,k=0,ans=0;
13         bool vis;
14         memset(man,0,sizeof(man));
15         memset(woman,0,sizeof(woman));
16         memset(a1,0,sizeof(a1));
17         memset(a2,0,sizeof(a2));
18         memset(b1,0,sizeof(b1));
19         memset(b2,0,sizeof(b2));
20         scanf("%d %d",&n,&m);
21         for(int i=0;i<n;i++){
22             scanf("%lld",&man[i]);
23         }
24         for(int i=0;i<m;i++){
25             scanf("%lld",&woman[i]);
26         }
27         for(int i=0;i<n;i++){
28             cin>>vis;
29             if(vis){
30                 a1[j]=man[i];
31                 j++;
32             }
33             else{
34                 a2[k]=man[i];
35                 k++;
36             }
37         }
38         for(int i=0;i<m;i++){
39             cin>>vis;
40             if(vis){
41                 b1[x]=woman[i];
42                 x++;
43             }
44             else{
45                 b2[y]=woman[i];
46                 y++;
47             }
48         }
49         sort(a1,a1+j);
50         sort(a2,a2+k);
51         sort(b1,b1+x);
52         sort(b2,b2+y);
53         for(int i=0,z=0;i<j;i++){
54             while(a1[i]>b2[z]&&z<y){
55                 z++;
56             }
57             if(z>=y){
58                 break;
59             }
60             ans++;
61             z++;
62         }
63         for(int i=0,z=0;i<x;i++){
64             while(b1[i]>a2[z]&&z<k){
65                 z++;
66             }
67             if(z>=k){
68                 break;
69             }
70             ans++;
71             z++;
72         }
73         printf("%d
",ans);
74     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
75 }
原文地址:https://www.cnblogs.com/Never-Land/p/10713244.html