• 牛客算法周周练11A


    链接:https://ac.nowcoder.com/acm/contest/6046/A
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 32768K,其他语言65536K
    64bit IO Format: %lld

    题目描述

    众所周知,SD省有一个可爱的妹子,叫做rqy(rqy天下第一可爱!不接受反驳,抱走rqy~),她经常(雾)和一个叫做clccle的蒟蒻一起刷题,但是因为clccle太弱了,所以说她会跳过难度较高的题目,同时,如果clccle的时间不足以切掉当前这道简单题,那么她同时也会跳过这道简单题目,相对的,rqy要花掉两倍的时间去切掉一道难度较高的题目,但如果时间不够用,她会跳过这道题目,但是有一个特殊规定,因为她们两个人都非常懒,所以她们只会按给定的顺序刷,现在两人的刷题列表是一样的,请求出在给定时间里clccle和rqy各最多能刷多少道题目。

    输入描述:

    第一行,两个整数n,t,表示有n道题目,给定的时间为t

    第二行 两个整数a,b 分别表示clccle所认为的难度较高和rqy认为的难度较高

    接下来两行,每行n个数字 第一行表示切题所需的时间,第二行表示题目的难度

    输出描述:

    输出两个整数,分别表示clccle和rqy的切题数
    示例1
    输入
    2 100
    6 10
    100 10
    7 5
    输出
    1 1
    说明
    clccle会跳过第一道题去切第二道题,而rqy会把时间都花在第一题上,P.s.100 10指的是两道题目所需的时间 7 5指的是题目的难度
    备注:
    难度较高为大于等于给定难度(>=)
    1<=n<=100000, 1<=a,b<=1e9

    题目大意:

    共有4行输入,第一行有2个数n,t,表示有n道题目和 t 单位的时间,第二行有两个数a,b,表示clccle所认为的难度较高和rqy认为的难度较高。第三行有n个数,表示第 i 个题目的切题所需时间,第四行有n个数,表示第 i 个题的难度,两个人都按顺序做题,求两人最多能做多少题。

    解题思路:

    题目中所说对于每个题:clccle和rqy在时间不够做该题目时会跳过此题,但clccle在面对难题时会直接跳过,rqy则会两倍时间去做这个题(两倍时间不够时也会跳过),理解题意后直接写代码就可以。AC代码:

    ps:时间有0这一说,所以不要在 t == 0 时直接退出循环,因为这个点WA了4发,记得开long long 。

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    typedef long long ll;
    const int _max = 1e5+50;
    struct node { ll st,ti; };//st难度,ti时间
    node a[_max];
    int main()
    {
        ll n,t,n1,n2;
        cin>>n>>t;
        cin>>n1>>n2;
        for(int i=0;i<n;i++)
          cin>>a[i].ti;
        for(int i=0;i<n;i++)
          cin>>a[i].st;
        ll ans1=0,ans2=0;//两人做题数量
        ll tmp=t;
        for(int i=0;i<n;i++)
        {
            if(tmp<a[i].ti||a[i].st>=n1)//难度过大或时间不足
              continue;
            tmp-=a[i].ti;
            ans1++;
        }
        tmp=t;
        for(int i=0;i<n;i++)
        {
            if(a[i].st>=n2)//难度大时
            {
                if(tmp<a[i].ti*2)//时间不足跳过
                  continue;
                tmp-=a[i].ti*2;
                ans2++;
                continue;
            }
            if(tmp<a[i].ti)//时间不足跳过
              continue;
            tmp-=a[i].ti;
            ans2++;
        }
        cout<<ans1<<" "<<ans2<<endl;
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    [ASP.NET] 使用 ASP.NET SignalR 添加实时 Web
    [ORM] Entity Framework(2) CodeFirst进阶
    [ORM] Entity Framework(1) CodeFirst快速入门
    [C#] 谈谈异步编程async await
    [Solution] NPOI操作Excel
    消息队列二
    消息队列一
    redis成长之路——(七)
    redis成长之路——(六)
    redis成长之路——(五)
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294251.html
Copyright © 2020-2023  润新知