fork(3) download
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. using namespace std;
  5.  
  6.  
  7. int main()
  8. {
  9. int t,n,tot,flag,k,i,all_1,vote[52],alloc[52],cast[52];
  10. scanf("%d",&t);
  11. while(t--)
  12. {
  13. memset(alloc,0,sizeof(alloc));
  14. memset(cast,0,sizeof(cast));
  15. all_1=1;
  16. flag=tot=0;
  17. scanf("%d",&n);
  18. for(i=0;i<n;i++)
  19. {
  20. scanf("%d",&vote[i]);
  21. tot+=(vote[i]);
  22. if(vote[i]!=0)
  23. alloc[i]=1;
  24. if(vote[i]==n)
  25. flag=1;
  26. if(vote[i]!=1)
  27. all_1=0;
  28. }
  29. if(tot<n || tot>n || flag==1) printf("-1\n");
  30. else if(n==2) printf("2 1\n");
  31. else if(all_1==1)
  32. {
  33. int j=n-1;
  34. for(i=0;i<n;i++)
  35. {
  36. printf("%d ",j);
  37. j=(j+1)%(n+1);
  38. if(j==0) j=1;
  39. }
  40.  
  41. printf("\n");
  42. }
  43. else
  44. {
  45. /*for(i=0;i<n;i++)
  46. {
  47. for(k=(i+1)%n;k!=i;k=(k+1)%n)
  48. {
  49. if(k!=i && vote[k]>0)
  50. {
  51. vote[k]--;
  52. break;
  53. }
  54. }
  55. printf("%d ",k+1);
  56. }*/
  57. for(i=0;i<n;i++)
  58. {
  59. if(alloc[i]==1)
  60. {
  61. for(k=(i+1)%n;k!=i;k=(k+1)%n)
  62. {
  63. if(k!=i && vote[k]>0)
  64. {
  65. vote[k]--;
  66. break;
  67. }
  68. }
  69. cast[i]=k+1;
  70. //cout<<cast[i]<<" "<<i<<"\n";
  71. }
  72. }
  73. //for(i=0;i<n;i++)
  74. //printf("%d ",cast[i]);
  75. //cout<<"\n";
  76. for(i=0;i<n;i++)
  77. {
  78. if(cast[i]==0)
  79. {
  80. for(k=(i+1)%n;k!=i;k=(k+1)%n)
  81. {
  82. if(k!=i && vote[k]>0)
  83. {
  84. vote[k]--;
  85. cast[i]=k+1;
  86. break;
  87. }
  88. }
  89. }
  90. }
  91. for(i=0;i<n;i++)
  92. printf("%d ",cast[i]);
  93.  
  94. printf("\n");
  95. }
  96. }
  97. return 0;
  98. }
  99.  
Success #stdin #stdout 0s 3100KB
stdin
1
34
1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 2 10 0 0 0 0 0 0 5 1 2
stdout
2 3 4 7 24 25 8 9 10 11 12 13 14 15 16 24 25 25 25 25 25 25 25 25 32 32 32 32 32 34 25 33 34 1