牛客算法周周练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;
}
posted @ 2020-06-18 18:16  Hayasaka  阅读(59)  评论(0编辑  收藏  举报