CF1690C题解

主要题意:
有 n 个任务,必须在 si到 ti 之间完成,求每个任务最大可以完成多久(优先前面的最大)。
思路
就拿一个变量记录当前时间,然后贪心选择 a[i].t 和 a[i + 1].t 中的最小值,(应为至少也要给下一个任务留 1 的时间),最后做减法,输出即可。
代码

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int Maxn = 2e5 + 5;
 5 
 6 struct node
 7 {
 8     int s, t;
 9 } a[Maxn];
10 
11 int n, t, ti;
12 
13 int main()
14 {
15     ios::sync_with_stdio(0);//其实不用快读
16     cin.tie(), cout.tie();//关同步流即可
17     cin >> t;
18     while (t--)
19     {
20         cin >> n;
21         for (int i = 1; i <= n; i++)
22         {
23             cin >> a[i].s;
24         }
25         for (int i = 1; i <= n; i++)
26         {
27             cin >> a[i].t;
28         }
29         a[n + 1].s = a[n + 1].t = INT_MAX;//将最后一个赋值为最大
30         ti = a[1].s;//记录时间
31         for (int i = 1; i <= n; i++)
32         {
33             cout << min(a[i].t, a[i + 1].t) - ti << " ";
34             ti = max(min(a[i].t, a[i + 1].t - 1), a[i + 1].s);//注意减一
35         }
36         cout << "\n";
37     }
38     return 0;//华丽的结束
39 }
Code

 

posted @ 2023-09-09 10:37  mouse_boy  阅读(7)  评论(0编辑  收藏  举报