G. Assembly Line
链接
https://codeforces.com/gym/105930/problem/G
思路
比较难想,但是想到之后就是豁然开朗。
对每个工件来说:本来完成的世间是ti+k-wi。但是由于后续比他先完成的工件,必然会导致+1。所以就a[i]=max(a[i-1]+1,a[i])就行了

代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define tin long long
#define itn long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
void solve();
int t;
int n;
const int N = 2e5 + 10;
int a[N];
int k;
void solve()
{
cin >> n >> k;
for (int i = 1; i <= n; i++) { int wi, ti; cin >> wi >> ti; a[i] = ti + k - wi;}
sort(a + 1, a + 1 + n);
for (itn i = 1; i <= n; i++)a[i] = max(a[i], a[i - 1] + 1);
cout << a[n] << '\n';
}
signed main()
{
IOS;
cin >> t;
while(t--)
solve();
return 0;
}

浙公网安备 33010602011771号