求洛谷原题*2
  • 板块学术版
  • 楼主NightStriker
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/12/19 19:25
  • 上次更新2023/10/24 07:11:20
查看原帖
求洛谷原题*2
714084
NightStriker楼主2022/12/19 19:25
第二题 阅读
题目描述:
Bxgz 有两摞书,第一摞书有 N(1<=N<=200000)本,第二摞书有 M(1<=M<=200000)本。
第一摞书第 i 本需要花费 Ai(1<=Ai<=200000)时间才能阅读完毕,第二摞书第 i 本需要花费
Bi(1<=Bi<=200000)时间才能阅读完毕。每摞书都只能从上往下按顺序阅读,读走一本扔掉
一本。
现在你有 K(1<=K<=200000)分钟的阅读时间,每次你可以从两摞书中任选一本出来阅读,
请问在规定时间内,你最多能阅读多少本书?
输入格式:
第一行三个整数 N、M、K
第二行 N 个整数表示 Ai
第三行 M 个整数表示 Bi
输出格式:
一个整数表示最多能阅读多少本书
样例输入 13 4 240
60 90 120
80 150 80 150
样例输出 13

模拟赛T2。

打了个模拟感觉能过,就是不断比较第一堆和第二堆哪个时间短。

时间复杂度也就 O(n+k)\mathcal{O}(n+k) 吧(

#include<iostream>
using namespace std;
int n,m,k,b[200001],a[200001],ans;
int main(){
	cin>>n>>m>>k;
	for(int i = 1;i<=n;i++) cin>>a[i];
	for(int i = 1;i<=n;i++) cin>>b[i];
	int as = 1,bs = 1;
	while(k>0,as<=n,bs<=n){
		if(a[as]<b[bs]) k-=b[bs],bs++,ans++;
		else k-=a[as],as++,ans++;
	}
	cout<<ans<<endl;
	return 0;
}

对了,还有这个帖子。

2022/12/19 19:25
加载中...