Auteur du problème: | Hasan Saleh (MathModel) |
Préparé par: | Hasan Saleh (MathModel) |
Édité par: | Hasan Saleh (MathModel) |
Remarquez que la somme maximale de la permutation est la permutation elle-même sans rien faire, qui est
négatif d'un certain élément de signifie que S \rightarrow S-2x, cela s'applique également pour la somme d'un sous-ensemble de n'importe quelle longueur , ainsi nous avons une condition suffisante pour qu'une permutation existe réellement :
Ainsi, nous pouvons obtenir la somme du sous-ensemble des nombres négatifs X=\frac{S-k}{2}. Nous pouvons limiter la somme du sous-ensemble, qui est au moins
, et au maximum entiers à partir du plus élevé
Si n'est pas limité dans cette plage, alors il est évident qu'une telle permutation n'existe pas.
Enfin, nous pouvons choisir des nombres à rendre négatifs de manière gourmande, afin que nous ayons toujours un champ pour jouer avec des entiers lors du prochain mouvement.
Solution
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)))Complexité