#include <bits/stdc++.h>
using namespace std;
using ll=long long; // 别名定义,简化长整型书写,避免溢出
const ll N=1e5+5; // 定义数组最大容量,适配题目数据范围
// 结构体定义:存储每道题的核心属性
// T:完成该题需要的基础时间;H:该题的难度值
struct q{
ll T;
ll H;
};
q Q[N]; // 数组存储所有题目的信息
int main() {
// 输入加速:关闭同步流+解绑cin与cout,提升大数据量输入效率
ios::sync_with_stdio(0),cin.tie(0);
// 1. 输入基础参数
ll n,t; // n:题目总数;t:两人拥有的总时间
cin>>n>>t;
ll a,b; // a:clccle的难度阈值;b:rqy的难度阈值
cin>>a>>b;
// 2. 输入每道题的基础耗时(T)
for(ll i=1;i<=n;i++){
cin>>Q[i].T;
}
// 3. 输入每道题的难度值(H)
for(ll i=1;i<=n;i++){
cin>>Q[i].H;
}
// ===================== 算法核心1:计算clccle能完成的题目数 =====================
// 算法思想:clccle只做难度低于a的题,且按题目顺序依次尝试,时间不足则跳过
ll t1=t; // 复制总时间,避免修改原始t值
ll cnt1=0; // 统计clccle完成的题目数量
for(ll i=1;i<=n;i++){
// 步骤1:跳过难度≥a的题目(clccle不做难题)
if(Q[i].H>=a){
continue;
}
// 步骤2:剩余时间不足以完成当前简单题,跳过
if(Q[i].T>t1){
continue;
}
// 步骤3:时间足够,完成该题:扣除耗时+计数+1
t1-=Q[i].T;
cnt1++;
}
// ===================== 算法核心2:计算rqy能完成的题目数 =====================
// 算法思想:rqy做难度≥b的题需要2倍时间,难度<b的题正常时间;按顺序尝试,时间不足则跳过
ll t2=t; // 重新复制总时间,用于rqy的计算
ll cnt2=0; // 统计rqy完成的题目数量
for(ll i=1;i<=n;i++){
// 分支1:当前题是难题(≥b)且2倍时间超过剩余时间 → 跳过
if(Q[i].H>=b&&Q[i].T*2>t2){
continue;
}
// 分支2:当前题是难题(≥b)且2倍时间足够 → 完成该题
else if(Q[i].H>=b&&Q[i].T*2<=t2){
t2-=Q[i].T*2; // 扣除2倍基础时间
cnt2++; // 计数+1
continue;
}
// 分支3:当前题是简单题(<b)但正常时间超过剩余时间 → 跳过
else if(Q[i].H<b&&Q[i].T>t2){
continue;
}
// 分支4:当前题是简单题(<b)且正常时间足够 → 完成该题
else{
t2-=Q[i].T; // 扣除基础时间
cnt2++; // 计数+1
continue;
}
}
// 4. 输出结果:依次输出clccle和rqy完成的题目数量
cout<<cnt1<<" "<<cnt2;
return 0;
}
题目简单,但是雄狮般的语言描述

京公网安备 11010502036488号