Advertisement
mickypinata

PROG-T1112: Inversion

Aug 8th, 2021
1,011
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.69 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 1e4;
  5. const int MD = 2012;
  6.  
  7. int dp[N + 1], qs[N + 1];
  8.  
  9. int main(){
  10.  
  11.     int x, k;
  12.     scanf("%d%d", &x, &k);
  13.     dp[0] = 1;
  14.     dp[1] = 1;
  15.     for(int i = 0; i <= 6; ++i){
  16.         qs[i] = (i < 1 ? 0 : qs[i - 1]) + dp[i];
  17.     }
  18.     for(int i = 3; i <= x; ++i){
  19.         int upb = min(k, i * (i - 1) / 2);
  20.         for(int j = 0; j <= upb; ++j){
  21.             dp[j] = (MD + qs[j] - (j - i < 0 ? 0 : qs[j - i])) % MD;
  22.         }
  23.         upb = min(k, i * (i + 1) / 2);
  24.         for(int j = 0; j <= upb; ++j){
  25.             qs[j] = ((j < 1 ? 0 : qs[j - 1]) + dp[j]) % MD;
  26.         }
  27.     }
  28.     cout << dp[k];
  29.  
  30.     return 0;
  31. }
  32.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement