Advertisement
Ritam_C

Permutation by sum

Apr 11th, 2021
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define ull unsigned long long int
  4. #define ld long double
  5. #define pb push_back
  6. #define p_b pop_back
  7. #define si stack<int>
  8. #define sll stack<ll>
  9. #define sc stack<char>
  10. #define vi vector<int>
  11. #define vll vector<ll>
  12. #define mii map<int, int>
  13. #define msi map<string, int>
  14. #define mci map<char, int>
  15. #define qc queue<char>
  16. #define qi queue<int>
  17. #define qll queue<ll>
  18. using namespace std;
  19.  
  20. int main(){
  21.     ios_base::sync_with_stdio(false);
  22.     cin.tie(NULL);
  23.     int t;
  24.     cin >> t;
  25.     while(t--){
  26.         int n, l, r, s;
  27.         cin >> n >> l >> r >> s;
  28.         int arr[n];
  29.         for(int i = 1; i <= n; i++){
  30.             arr[i-1] = i;
  31.         }
  32.         long sum1 = 0, sum2 = 0;
  33.         for(int i = 0; i < r-l+1; i++){
  34.             sum1 += arr[i];
  35.             sum2 += arr[n-i-1];
  36.         }
  37.         if(s < sum1 || s > sum2){
  38.             cout << "-1\n";
  39.         } else{
  40.             for(int i = r-l; i >= 0; i--){
  41.                 for(int j = n-1; j >= r-l+1; j--){
  42.                     if(s-sum1 >= abs(arr[j]-arr[i])){
  43.                         swap(arr[i], arr[j]);
  44.                         sum1 += abs(arr[j]-arr[i]);
  45.                         break;
  46.                     }
  47.                 }
  48.                 int j = n-2;
  49.                 while(j >= r-l+1){
  50.                     if(arr[j] > arr[j+1]){
  51.                         swap(arr[j], arr[j+1]);
  52.                     }
  53.                     j--;
  54.                 }
  55.             }
  56.             int a[n] = {0};
  57.             for(int i = 0; i < l-1; i++){
  58.                 a[i] = arr[n-i-1];
  59.             }
  60.             for(int i = 0; i < n-l+1; i++){
  61.                 a[i+l-1] = arr[i];
  62.             }
  63.             for(int i = 0; i < n; i++){
  64.                 cout << a[i] << " ";
  65.             }
  66.             cout << "\n";
  67.         }
  68.     }
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement