奶牛 Bessie 有 𝑁 ( 1 ≤ 𝑁 ≤ 2 ⋅ 10 5 )个工作需要你去完成。第 𝑖 个工作,如果你选择完成它,必须在时刻 𝑠 𝑖 或之前开始,花费 𝑡 𝑖 时间才能完成( 0 ≤ 𝑠 𝑖 ≤ 10 18 , 1 ≤ 𝑡 𝑖 ≤ 10 18 )。 你可以完成的工作的最大数量是多少?时间从时刻 0 开始,并且一旦你开始一个工作,你必须一直工作直到完成,而不能在此期间开始完成其他工作。 输入 输入的第一行包含 𝑇 ,为测试用例的数量( 1 ≤ 𝑇 ≤ 10 )。每个测试用例的格式如下。 第一行包含 𝑁 。 以下 𝑁 行,每行包含两个整数 𝑠 𝑖 和 𝑡 𝑖 。第 𝑖 + 1 行为第 𝑖 个工作的信息。 输入保证所有测试用例的 𝑁 之和不超过 3 ⋅ 10 5 。 输出 对于每个测试用例输出一行,包含你可以完成的工作的最大数量。 样例输入 复制 3 2 1 4 1 2 2 2 3 1 2 3 1 4 2 3 1 2 样例输出 复制 1 2 2 提示 ## 提示 对于第一个测试用例,你
这个问题是一个经典的任务调度问题,目标是选择尽可能多的工作,使得每个工作都能在截止时间前开始并完成。 我们可以将工作按照截止时间 \( s_i \) 排序,然后使用一个优先队列(大根堆)来维护已选择的工作的耗时。 算法思路: 1. 将所有工作按 \( s_i \) 从小到大排序。 2. 遍历每个工作: - 将当前工作加入已选集合(将 \( t_i \) 加入优先队列,并累加总耗时 `sum_t`)。 - 如果 `sum_t > s_i`,说明当前已选工作无法全部在截止时间前完成,则移除耗时最长的工作(优先队列中最大的 \( t \)),并更新 `sum_t`。 3. 最终优先队列的大小就是能完成的最大工作数。 时间复杂度: 排序 \( O(N \log N) \),每个工作最多一次入堆和出堆,也是 \( O(N \log N) \),总复杂度 \( O(N \log N) \),可以处理 \( N \leq 2\times 10^5 \) 的数据。 C++ 实现: ```cpp #include <iostream> #include <vector> #include <algorithm> #include <queue> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; while (T--) { int N; cin >> N; vector<pair<long long, long long>> jobs(N); for (int i = 0; i < N; i++) { cin >> jobs[i].first >> jobs[i].second; } // 按 s_i 排序 sort(jobs.begin(), jobs.end()); priority_queue<long long> pq; // 大根堆,存放已选工作的耗时 long long sum_t = 0; for (auto& job : jobs) { long long s = job.first, t = job.second; pq.push(t); sum_t += t; if (sum_t > s) { // 移除耗时最长的工作 sum_t -= pq.top(); pq.pop(); } } cout << pq.size() << "\n"; } return 0; } ``` [2026-01-18 12:55:29 | AI问答 | 494点数解答]
- [DeepSeek] 奶牛 Bessie 有 𝑁 ( 1 ≤ 𝑁 ≤ 2 ⋅ 10 5 )个工作需要你去完成。第 𝑖 个工作,如果你选择完成它,必须在时刻 𝑠 𝑖 或之前开始,花费 𝑡 𝑖 时间才能完成( 0 ≤ 𝑠 𝑖 ≤ 10 18 , 1 ≤ 𝑡 𝑖 ≤ 10 18 )。 你可以完成的工作的最大数量是多少?时间从时刻 0 开始,并且一旦你开始一个工作,你必须一直工作直到完成,而不能在此期间开始完成其他工作。 输入 输入的第一行包含 𝑇 ,为测试用例的数量( 1 ≤ 𝑇 ≤ 10 )。每个测试用例的格式如下。 第一行包含 𝑁 。 以下 𝑁 行,每行包含两个整数 𝑠 𝑖 和 𝑡 𝑖 。第 𝑖 + 1 行为第 𝑖 个工作的信息。 输入保证所有测试用例的 𝑁 之和不超过 3 ⋅ 10 5 。 输出 对于每个测试用例输出一行,包含你可以完成的工作的最大数量。 样例输入 复制 3 2 1 4 1 2 2 2 3 1 2 3 1 4 2 3 1 2 样例输出 复制 1 2 2 提示 ## 提示 对于第一个测试用例,你(494点数解答 | 2026-01-18 12:55:29)21
- [DeepSeek] - ItemId: 12720 #道具id A级赛车 雷诺 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 127758 #道具id 宠物 冰凤 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 21980 #道具id 效率宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 - ItemId: 21986 #道具id 重生宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 这种文本文件如何用易语言读入并显示到超级列表框内 (571点数解答 | 2025-08-23 20:54:40)193
- [DeepSeek] - ItemId: 12720 #道具id A级赛车 雷诺 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 127758 #道具id 宠物 冰凤 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 21980 #道具id 效率宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 - ItemId: 21986 #道具id 重生宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 这种文本文件如何用易语言读入并显示到超级列表框内,并且可以增加新的一样的文本(1317点数解答 | 2025-08-23 20:58:40)198
- [字节豆包] 题目描述 在甜甜圈王国中,每颗甜甜圈都有一个甜度值 S 来衡量其甜蜜程度。根据甜度的不同,甜甜圈被评定为不同的等级,具体规则如下: 如果 S 在 0 到 25 之间(包含 0 和 25 ),输出 "普通甜甜圈"; 如果 S 在 26 到 50 之间(包含 26 和 50 ),输出 "美味甜甜圈"; 如果 S 在 51 到 75 之间(包含 51 和 75 ),输出 "极品甜甜圈"; 如果 S 在 76 到 99 之间(包含 76 和 99 ),输出 "绝世甜甜圈"; 如果 S 等于 100 ,输出 "传说甜甜圈"。 请根据给定的甜度值 S,输出对应的甜甜圈等级名称。 输入格式 一行一个整数 S,表示甜甜圈的甜度值。(243点数解答 | 2025-12-06 18:35:50)59
- [字节豆包] 题目描述 最近有 n 个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 m 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。 输入格式 第一行有两个用空格隔开的整数,分别代表 n 和 m。 第 2 到第 (n+1) 行,每行一个整数,第 (i+1) 行的整数 a i 代表第 i 件事的刺痛值 a i 。 输出格式 输出一行一个整数,表示连续 m 个刺痛值的和的最小值是多少。 输入输出样例 输入 #1复制 8 3 1 4 7 3 1 2 4 3 输出 #1复制 6 说明/提示 数据规模与约定 对于 30% 的数据,保证 n≤20。 对于 60% 的数据,保证 n≤100。 对于 90% 的数据,保证 n≤10 3 。 对于 100% 的数据,保证 0≤m≤n≤3×10 3 ,1≤a i ≤100。 用c++语言(241点数解答 | 2025-11-24 19:52:43)66
- [字节豆包] 叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻。毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌。一千多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定是一生最难忘的时刻! 彩排了一次,老师不太满意。当然啦,取每位同学的号数来找最大公约数显然不太合理。于是老师给每位同学评了一个能力值。于是现在问题变为,从 个学生中挑出 个人使得他们的默契程度(即能力值的最大公约数)最大。但因为节目太多了,而且每个节目需要的人数又不知道。老师想要知道所有情况下能达到的最大默契程度是多少。这下子更麻烦了,还是交给你吧~ PS:一个数的最大公约数即本身。 输入 第一行一个正整数 。 第二行为 个空格隔开的正整数,表示每个学生的能力值。 输出 总共 行,第 行为 情况下的最大默契程度。 样例输入 复制 4 1 2 3 4 样例输出 复制 4 2 1 1 提示 记输入数据中能力值的最大值为 。 - 对于 的数据, , ; - 对于另 的数据, , ; - 对于 的数据, , 。 来源/分类(487点数解答 | 2026-01-24 13:10:18)25
- [字节豆包] 题目描述 输入三个整数 x , y , z x,y,z, 如果 x x为奇数,输出 1 ∼ y 1∼y之间的所有数,如果 x x为偶数,输出 1 ∼ z 1∼z之间的所有数。 输入格式 输入包括一行,包含三个整数 x , y , z x,y,z,数字之间用空格隔开。 输出格式 输出包括一行 如果 x x为奇数,输出 1 ∼ y 1∼y之间的所有数,如果 x x为偶数,输出 1 ∼ z 1∼z之间的所有数,输出时,数与数之间用1个空格隔开。 input1 复制 1 10 5 output1 复制 1 2 3 4 5 6 7 8 9 10 input2 复制 4 20 4 output2 复制 1 2 3 4 样例解释 对于样例 1 1: x x是奇数, y = 10 y=10,因此输出 1 ∼ 10 1∼10。 对于样例 2 2: x x是偶数, z = 10 z=10,因此输出 1 ∼ 4 1∼4 。 c++ (391点数解答 | 2025-06-14 09:57:45)304
- [字节豆包] 用C++给定一个整数 N N,判断其正负。如果 N > 0 N>0,输出 p o s i t i v e positive; 如果 N = 0 N=0,输出 z e r o zero; 如果 N < 0 N<0,输出 n e g a t i v e negative。 输入 一个整数 N ( − 10 9 ≤ N ≤ 10 9 ) N(−10 9 ≤N≤10 9 )。 输出 如果 N > 0 N>0, 输出 p o s i t i v e positive; 如果 N = 0 N=0, 输出 z e r o zero; 如果 N < 0 N<0, 输出 n e g a t i v e negative。 回答篇幅:越详细越好(610点数解答 | 2026-01-24 22:28:14)34
- [字节豆包] 用C++给定一个整数 N N,判断其正负。如果 N > 0 N>0,输出 p o s i t i v e positive; 如果 N = 0 N=0,输出 z e r o zero; 如果 N < 0 N<0,输出 n e g a t i v e negative。 输入 一个整数 N ( − 10 9 ≤ N ≤ 10 9 ) N(−10 9 ≤N≤10 9 )。 输出 如果 N > 0 N>0, 输出 p o s i t i v e positive; 如果 N = 0 N=0, 输出 z e r o zero; 如果 N < 0 N<0, 输出 n e g a t i v e negative。(150点数解答 | 2026-01-24 22:29:16)37
- [字节豆包] 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(385点数解答 | 2025-01-08 03:43:54)429
- [字节豆包] 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(346点数解答 | 2025-01-08 03:46:29)425
- [DeepSeek] 小核桃准备使用 a 数组,存储战力为1~10的守卫各有多少个。 即:a[1] 存储战斗力为1的守卫数量,a[2] 存储战斗力为 2 的守卫数量,... 依次类推,a[10] 存储战斗力为 10 的守卫数量。 请你编写程序,使用数组依次存储战力1~10的守卫数量,并按数组下标顺序(从小到大),依次输出每个守卫的战力。 样例1解释: 样例1 输入数据依次表示:战力为1 的守卫有 3 个,战力为3的守卫有 1 个,战力 为4 的守卫有 2 个,战力为 8 的守卫有 2 个,其余战力为2.5.6.7.9.10的守卫数量都为 0。 所以依次输出 三 个 1,一个 3,两个 4,两个 8。 输入: 十个整数,即1~10中每个数的个数。 输出: 一行若干个整数,为从小到大排好序的数,相邻数字之间用空格隔开。 c++(130点数解答 | 2026-01-17 14:11:22)30