CF1968C 题解

思路

首先 a1a_1 只要比 x1x_1 大就行,例如 114514114514 就一定合法(因为 xi500x_i\le500)。后面的 aia_i 不仅要满足 ai>xia_i>x_i,还要满足 aimodai1=xi1a_i\bmod a_{i-1}=x_{i-1}。但 aia_i 的范围要求很大,足足有 10910^9,所以只要随便构造一个就好。这里我用的是保守的方法,就是用 xi+ai1xi1ai1×ai1+xi1\lfloor\frac{x_i+a_{i-1}-x_{i-1}}{a_{i-1}}\rfloor\times a_{i-1}+x_{i-1} 来得出一个最小的 aia_i 使得 ai>xia_i>x_iaimodai1=xia_i\bmod a_{i-1}=x_i。当然也有二分等许多方法,我这里就不详细说明了。

代码

# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
int t, n, a[200005], lst;
int main () {
	ios::sync_with_stdio (0);
	cin.tie (0);
	cout.tie (0);
	cin >> t;
	while (t --) {
		cin >> n;
		for (int i = 1; i < n; ++ i)
			cin >> a[i];
		a[n] = 0;
		cout << (lst = a[1] + 1);
		for (int i = 1; i < n; ++ i) {
			lst = (a[i + 1] + lst - a[i]) / lst * lst + a[i];
			cout << ' ' << lst;
		}
		cout << '\n';
	}
	return 0;
}
posted @ 2024-05-03 21:59  Vitamin_B  阅读(8)  评论(0)    收藏  举报  来源