Autor del problema: | Hasan Saleh (MathModel) |
Preparado por: | Hasan Saleh (MathModel) |
Editado por: | Hasan Saleh (MathModel) |
Ten en cuenta que la suma máxima de la permutación es la permutación misma sin hacer nada, que es
negando algún elemento de , lo que significa que S \rightarrow S-2x, esto también se aplica a la suma de algún subconjunto de cualquier longitud , por lo tanto, tenemos una condición suficiente para que una permutación realmente exista:
Así, podemos obtener la suma del subconjunto de números negados como X=\frac{S-k}{2}. Podemos acotar la suma del subconjunto, que es al menos
, y como máximo enteros desde el más alto
Si no está acotado en ese rango, entonces es obvio que tal permutación no existe.
Finalmente, podemos elegir números para negar codiciosamente, de modo que siempre tengamos un campo para jugar con enteros en el siguiente movimiento.
Solución
for _ in range(int(input())):
n,m,k=map(int,input().split())
S=n*(n+1)//2
if (S-k)&1 or k>S:
print(-1); continue
X=(S-k)//2
lo=m*(m+1)//2
hi=S-(n-m)*(n-m+1)//2
if X<lo or X>hi:
print(-1); continue
neg=[False]*(n+1)
rem=m; target=X
for i in range(n,0,-1):
if rem==0: break
if target>=i and target-i>=(rem-1)*rem//2:
neg[i]=True
target-=i
rem-=1
if rem or target:
print(-1); continue
print(*(-i if neg[i] else i for i in range(1,n+1)))Complejidad