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 }