Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2016
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.80 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 2016;
  6. const int MOD = 1e9 + 7;
  7. const int INV2 = 500000004;
  8.  
  9. int n;
  10. int a[N];
  11. int C[N][N];
  12.  
  13. void _main() {
  14.     for (int i = 0; i < N; ++i) {
  15.         C[i][0] = 1;
  16.         for (int j = 1; j <= i; ++j) {
  17.             C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % MOD;
  18.         }
  19.     }
  20.  
  21.     int T; cin >> T;    
  22.     while (T--) {
  23.         cin >> n;
  24.         for (int i = 0; i < n; ++i) cin >> a[i];
  25.          map<int, int> S;
  26.         for (int i = 0; i < n; ++i) ++S[a[i]];
  27.         int distincts = S.size();
  28.         int repeat = 0;
  29.         for (auto it : S) if (it.second == 2) repeat += 1;
  30.  
  31.         vector<long long> power (1, 1);
  32.         for (int i = 1; i <= repeat; ++i)
  33.             power.push_back(power.back() * INV2 % MOD);
  34.  
  35.         vector<long long> fact (1, 1);
  36.         for (int i = 1; i <= n; ++i)
  37.             fact.push_back(fact.back() * i % MOD);
  38.  
  39.         long long ans = fact[n] * power[repeat] % MOD;
  40.         for (int i = 1; i <= repeat; ++i) {
  41.             int n_pairs = i;
  42.             int remain = n - n_pairs * 2;
  43.             long long first = fact[n_pairs];
  44.             long long second = fact[remain] * power[repeat - n_pairs] % MOD;
  45.             long long cur = first * second % MOD;
  46.             cur = cur * C[n_pairs + remain][n_pairs] % MOD;
  47.             cur = cur * C[repeat][n_pairs] % MOD;
  48.  
  49.             if (i & 1) {
  50.                 ans -= cur;
  51.             } else {
  52.                 ans += cur;
  53.             }
  54.             ans %= MOD;
  55.             if (ans < 0) ans += MOD;
  56.         }
  57.  
  58.         cout << ans << '\n';
  59.     }
  60. }
  61.  
  62. int main() {
  63.     ios::sync_with_stdio(false); cin.tie(NULL);
  64.     _main();
  65.     cerr << setprecision(2) << fixed << endl << "Elapsed " << (double)clock() / CLOCKS_PER_SEC << endl;
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement