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;
}


posted @ 2025-05-31 19:45  WHUStar  阅读(61)  评论(0)    收藏  举报