The 19th Zhejiang University Programming Contest Sponsored by TuSimple (Mirror)

A:  Thanks, TuSimple!
题目大意:
第一行表示测试案例,第二行的m,n表示男士与女士人数;第三行表示男士的身高,第四行表示女士的身高,第五行表示男式对于舞伴的要求,第六行表示女士对于舞伴的要求(1表示舞伴要比自己高,0表示舞伴要比自己矮)
思路分析:要求为1的男士要找要求为0的女士组队,同理,要求为0的男士,要找要求为1的女士组队。所以我们把男士中的1与0分开,把女士中的1与0分开。分别比较男士中的1与女士中的0;女士中的0与男士中的1  他们之间的身高关系,有一对满足题意的,计数就加一。

代码如下:

#include<iostream>
#include<cstring>
#include <algorithm>
#include<cstdio>
using namespace std;

const int maxn = 100005;

long long int nan0[maxn], nan1[maxn], nv0[maxn], nv1[maxn];
long long int arr1[maxn], arr2[maxn];
int nan00, nan11, nv00, nv11;
int vis[maxn],vis1[maxn];
int cmp(int a,int b)
{
    return a>b;
}
int main() {
    int t;
    cin >> t;
    int n, m,j;
    while (t--) {
            int ans1=0;
        nan00 = nan11 = nv00 = nv11 = 0;
        scanf("%d%d", &n, &m);
        for (int i = 0; i < n; i++) //男性身高
            scanf("%lld", &arr1[i]);

        for (int i = 0; i < m; i++) //女性身高
            scanf("%lld", &arr2[i]);

        int x;
        for (int i = 0; i < n; i++) {
            scanf("%d", &x);
            if (x == 1)//男性要1
                nan1[nan11++] = arr1[i];
             else //要0
                nan0[nan00++] = arr1[i];

        }
        for (int i = 0; i < m; i++) {
            scanf("%d", &x);
            if (x == 1) //女性要1
                nv1[nv11++] = arr2[i];
             else //要0
                nv0[nv00++] = arr2[i];

        }
        sort(nan0, nan0 + nan00,cmp);//男性0排序
        sort(nan1, nan1 + nan11,cmp);//男性1排序
        sort(nv0, nv0 + nv00,cmp);//女性0排序
        sort(nv1, nv1 + nv11,cmp);//女性1排序


        memset(vis,0,sizeof(vis));
        j=0;
          for(int i=0;i<nv00;i++)
            for(;j<nan11;j++)
          {
                 if (nan1[j] < nv0[i]&&vis[j]==0)
                 {
                     vis[j]=1;
                      ans1++;

                      break;
                 }

          }
         memset(vis1,0,sizeof(vis1));
         j=0;
          for(int i=0;i<nan00;i++)
            for(;j<nv11;j++)
          {
                if (nan0[i] > nv1[j]&&vis1[j]==0)
                {
                    vis1[j]=1;
                      ans1++;

                      break;
                }

          }
        printf("%d\n", ans1);

    }
}

E: Potion

题目大意:BaoBao要调制药水,给n种原料。第一行表示测试案例,第二行输入一个n,表示有n种原料,第三行的n个数表示要成功配置药水,每种成分所需的量,用数组a[]记录,后方的成分等级最高。第四行的n个数,表示每种成分所拥有的量,用数组b[]记录。等级高的可以当作等级低的成分使用。
思路:从后向前进行比较,当a[n-1]>b[n-1]时一定不会成功,输出No,否则从倒数第二个数开始,若a[i]>b[i],输出no,否则就把

b[i]-a[i]的值就到b[i-1]身上。
代码如下:
 

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
long long int a[110],b[110];
int main()
{
    int T,n;
    while(scanf("%d",&T)!=EOF)
    {
        while(T--)
        {
            scanf("%d",&n);
            for(int i=0;i<n;i++)
                scanf("%lld",&a[i]);
            for(int i=0;i<n;i++)
                scanf("%lld",&b[i]);
            int flag=1;
            for(int i=n-1;i>=0;i--)
            {
                if(a[i]>b[i]) {flag=0;printf("No\n");break;}
                 else
                 {
                     b[i-1]+=b[i]-a[i];
                 }
            }
            if(flag) printf("Yes\n");//注意看Yes,No的大小写
        }
    }


    return 0;
}

J:Extended Twin Composite Number 

题目大意:第一行为测试案列,接下来是T个值,对于接下来的每一个n,找到两个合数,使两者之差等于n。由于题目中给定:若存在多种输出结果,输出一个即可,所以这里……
当n为偶数时,这两个数可以是 4 n+4
当n为奇数时,这两个数可以是9 n+9

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值