fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. #define fastio ios_base::sync_with_stdio(0), cin.tie(0)
  5. #define SET(x, y) memset((x), y, sizeof(x))
  6. const LL INF64 = 1e18;
  7. LL arr[305 * 305];
  8. LL grid[305][305];
  9.  
  10. int main() {
  11. SET(grid, -1);
  12. fastio;
  13. string s;
  14. cin >> s;
  15. cin >> s;
  16. LL n;
  17. cin >> n;
  18. for (int i = 0; i < n * (n + 1) / 2; i++)
  19. cin >> arr[i];
  20. if (n == 1) {
  21. cout << arr[0] << endl;
  22. return 0;
  23. }
  24. LL lo = 0;
  25. LL hi = n * (n + 1) / 2 - 1;
  26. sort(arr, arr + (n * (n + 1) / 2));
  27. for (int k = n - 1; k > 1; k--) {
  28. grid[k][k] = arr[hi--];
  29. grid[k][1] = arr[lo++];
  30. grid[k][0] = arr[lo++];
  31. }
  32. LL used1, used2;
  33. LL diff = INF64;
  34. for (int i = lo; i <= hi; i++) {
  35. for (int j = lo; j < i; j++) {
  36. if (arr[i] - arr[j] < diff) {
  37. diff = arr[i] - arr[j];
  38. used1 = i;
  39. used2 = j;
  40. }
  41. }
  42. }
  43. grid[1][0] = arr[used1];
  44. grid[1][1] = arr[used2];
  45. for (int i = 0; i < n; i++) {
  46. for (int j = 0; j <= i; j++) {
  47. while (lo == used1 || lo == used2)
  48. lo++;
  49. if (grid[i][j] == -1)
  50. grid[i][j] = arr[lo++];
  51. if (j > 0)
  52. cout << " ";
  53. cout << grid[i][j];
  54. }
  55. cout << endl;
  56. }
  57. return 0;
  58. }
Success #stdin #stdout 0s 16688KB
stdin
Kasus #202
5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
stdout
9
8 7
6 5 13
4 3 10 14
2 1 11 12 15