• 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 }
  • 相关阅读:
    gearman任务分发改进
    gearman实现任务分发
    BeanStalkd 做队列服务
    Tomcat各种日志的关系与catalina.out文件的分割
    数据库系统原理-关系数据库的规范化理论总结
    MySQL配置参数innodb_flush_log_at_trx_commit
    gRPC快速入门
    使用vagrant和kubeadm搭建k8s集群
    VS项目属性中的C/C++运行库:MT、MTd、MD、MDd
    消除C++中警告代码
  • 原文地址:https://www.cnblogs.com/Never-Land/p/10713244.html
Copyright © 2020-2023  润新知