NC19431. 切题之路
描述
众所周知,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指的是题目的难度C++11(clang++ 3.9) 解法, 执行用时: 46ms, 内存消耗: 1912K, 提交时间: 2019-10-29 00:10:05
#include<algorithm> using namespace std; int main() { long long i,j,n,t,a,b,t1,t2,s1,s2,x,y,T[100005],R[100005]; scanf("%lld%lld%lld%lld",&n,&t,&a,&b); for(i=0;i<n;i++)scanf("%lld",&T[i]); for(i=0;i<n;i++)scanf("%lld",&R[i]); s1=s2=0,t1=t2=t; for(i=0;i<n;i++) { if(t1>=T[i]&&R[i]<a)t1-=T[i],s1++; if(R[i]<b) { if(t2>=T[i])t2-=T[i],s2++; } else if(t2>=2*T[i])t2-=2*T[i],s2++; } printf("%lld %lld\n",s1,s2); return 0; }
Python3(3.5.2) 解法, 执行用时: 155ms, 内存消耗: 17772K, 提交时间: 2020-06-16 19:15:56
n,m=map(int,input().split()) n1,n2=map(int,input().split()) from sys import stdin tim=list(map(int,stdin.readline().split())) nan=list(map(int,stdin.readline().split())) clc,rqy=0,0 clc_t,rqy_t=m,m i=0 while i<n: if nan[i]<n1: if clc_t>=tim[i]: clc_t-=tim[i] clc+=1 if nan[i]>=n2: tim[i]*=2 if rqy_t>=tim[i]: rqy_t-=tim[i] rqy+=1 i+=1 print(clc,rqy)
C++14(g++5.4) 解法, 执行用时: 36ms, 内存消耗: 1784K, 提交时间: 2020-06-16 20:41:58
#include<cstdio> long long n,t,a,b,tt[100010],p[100010],an1=0,an2=0,i,t1,t2; int main() { scanf("%lld%lld%lld%lld",&n,&t,&a,&b); t1=t2=t; for(i=0;i<n;i++) scanf("%lld",&tt[i]); for(i=0;i<n;i++) scanf("%lld",&p[i]); for(i=0;i<n;i++) { if(a>p[i]&&t1>=tt[i]) {t1-=tt[i];an1++;} if(b>p[i]&&t2>=tt[i]) {t2-=tt[i];an2++;} else if(b<=p[i]&&t2>=2*tt[i]) {t2-=2*tt[i];an2++;} } printf("%d %d",an1,an2); }