牛客算法周周练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;
}