• 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 }
  • 相关阅读:
    NOIp前做题记录
    长链剖分学习笔记
    Java可重入锁AQS 和 CAS原理
    Shiro企业级实战详解,统一的Session管理。
    Jdk动态代理
    NIO实现的客户端和服务端
    Java编写生成mybatis xml文件、Dao文件、实体类和DTO
    [FreeRTOS入门] 1.CubeMX中FreeRTOS配置参数及理解
    Linux系统手动安装Firefox浏览器
    各种版本的firefox 下载
  • 原文地址:https://www.cnblogs.com/Never-Land/p/10713244.html
Copyright © 2020-2023  润新知