Enlace de tema
Asunto: 1409C
responder
Título
De acuerdo con la x
suma dada para y
construir una secuencia aritmética de todos los números positivos, se requiere que el número más grande en la secuencia sea el más pequeño.
Ideas
Primero juzgue cuántos dígitos pueden caber entre x
y y
, tome el valor máximo k
y úselo para encontrar la longitud del paso de la secuencia aritmética d
, luego intente hacer los n - k -1
dígitos restantes tanto como sea posible x
antes, y luego póngalo si aún queda y
después de esto.
Código AC
#include <bits/stdc++.h>
using namespace std;
//#pragma GCC optimize(2)
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ull unsigned long long
#define ll long long
#define rep(i, x, y) for(int i=x;i<=y;i++)
#define mms(x, n) memset(x, n, sizeof(x))
#define mmc(A, tree) memcpy(A, tree, sizeof(tree))
#define eps (1e-8)
#define PI (acos(-1.0))
#define INF (0x3f3f3f3f)
#define mod (ull)(1e9+7)
typedef pair<int, int> P;
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
int x, y;
scanf("%d%d", &x, &y);
vector<int> ans;
ans.push_back(x);
ans.push_back(y);
int k;
int del = y - x;
for (int i = n - 1; i >= 1; i--) {
if (del % i == 0) {
k = i;
break;
}
}
del = del / k;
for (int i = 1; i <= k - 1; i++) {
ans.push_back(x + del * i);
}
for (int i = 1; i <= n - k - 1; i++) {
if (x - del > 0) {
x -= del;
ans.push_back(x);
} else {
y += del;
ans.push_back(y);
}
}
for (auto i: ans) printf("%d ", i);
printf("\n");
}
return 0;
}