QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#627894#6143. 滚榜wzj33300100 ✓187ms215788kbC++235.2kb2024-10-10 17:32:512024-10-10 17:32:53

Judging History

你现在查看的是最新测评结果

  • [2024-10-10 17:32:53]
  • 评测
  • 测评结果:100
  • 用时:187ms
  • 内存:215788kb
  • [2024-10-10 17:32:51]
  • 提交

answer

/**
  * created     : 10.10.2024 16:27:25
  * author      : wzj33300
  */

#include <bits/stdc++.h>
using namespace std;

#ifdef DEBUG
#include <algo/debug.h>
#else
#define debug(...) 42
#define assert(...) 42
#endif

using ll = long long;
using u32 = unsigned int;
using u64 = unsigned long long;
using db = long double;  // or double, if TL is tight
using str = string;      // yay python!

// pairs
using pi = pair<int, int>;
using pl = pair<ll, ll>;
using pd = pair<db, db>;
#define mp make_pair
#define fi first
#define se second

// ^ lol this makes everything look weird but I'll try it
template <class T>
using vc = vector<T>;
template <class T, size_t SZ>
using AR = array<T, SZ>;
using vi = vc<int>;
using vb = vc<bool>;
using vl = vc<ll>;
using vd = vc<db>;
using vs = vc<str>;
using vpi = vc<pi>;
using vpl = vc<pl>;
using vpd = vc<pd>;

// vectors
// oops size(x), rbegin(x), rend(x) need C++17
#define sz(x) int((x).size())
#define bg(x) begin(x)
#define all(x) bg(x), end(x)
#define rall(x) x.rbegin(), x.rend()
#define sor(x) sort(all(x))
#define rsz resize
#define ins insert
#define pb push_back
#define eb emplace_back
#define ft front()
#define bk back()

#define rep(i, n) for (int i = 0; i < (n); ++i)
#define rep1(i, n) for (int i = 1; i < (n); ++i)
#define rep1n(i, n) for (int i = 1; i <= (n); ++i)
#define repr(i, n) for (int i = (n) - 1; i >= 0; --i)

#define rep_subset(t, s) \
  for (ll t = (s); t >= 0; t = (t == 0 ? -1 : (t - 1) & (s)))

#define lb lower_bound
#define ub upper_bound
template <class T>
int lwb(vc<T> &a, const T &b) {
  return int(lb(all(a), b) - bg(a));
}
template <class T>
int upb(vc<T> &a, const T &b) {
  return int(ub(all(a), b) - bg(a));
}
// const int MOD = 998244353;  // 1e9+7;
const int Big = 1e9;  // not too close to INT_MAX
const ll BIG = 1e18;  // not too close to LLONG_MAX
const db PI = acos((db)-1);
const int dx[4]{1, 0, -1, 0}, dy[4]{0, 1, 0, -1};  // for every grid problem!!
mt19937 rng((uint32_t)chrono::steady_clock::now().time_since_epoch().count());
template <class T>
using pqg = priority_queue<T, vector<T>, greater<T>>;

int pct(int x) { return __builtin_popcount(x); }
int pct(u32 x) { return __builtin_popcount(x); }
int pct(ll x) { return __builtin_popcountll(x); }
int pct(u64 x) { return __builtin_popcountll(x); }
int popcnt_mod_2(int x) { return __builtin_parity(x); }
int popcnt_mod_2(u32 x) { return __builtin_parity(x); }
int popcnt_mod_2(ll x) { return __builtin_parityll(x); }
int popcnt_mod_2(u64 x) { return __builtin_parityll(x); }
// (0, 1, 2, 3, 4) -> (-1, 0, 1, 1, 2)
int topbit(int x) { return (x == 0 ? -1 : 31 - __builtin_clz(x)); }
int topbit(u32 x) { return (x == 0 ? -1 : 31 - __builtin_clz(x)); }
int topbit(ll x) { return (x == 0 ? -1 : 63 - __builtin_clzll(x)); }
int topbit(u64 x) { return (x == 0 ? -1 : 63 - __builtin_clzll(x)); }
// (0, 1, 2, 3, 4) -> (-1, 0, 1, 0, 2)
int lowbit(int x) { return (x == 0 ? -1 : __builtin_ctz(x)); }
int lowbit(u32 x) { return (x == 0 ? -1 : __builtin_ctz(x)); }
int lowbit(ll x) { return (x == 0 ? -1 : __builtin_ctzll(x)); }
int lowbit(u64 x) { return (x == 0 ? -1 : __builtin_ctzll(x)); }

template <typename T>
T floor(T a, T b) {
  return a / b - (a % b && (a ^ b) < 0);
}
template <typename T>
T ceil(T x, T y) {
  return floor(x + y - 1, y);
}
template <typename T>
T bmod(T x, T y) {
  return x - y * floor(x, y);
}
template <typename T>
pair<T, T> divmod(T x, T y) {
  T q = floor(x, y);
  return {q, x - q * y};
}

template <class T>
bool ckmin(T &a, const T &b) {
  return b < a ? a = b, 1 : 0;
}  // set a = min(a,b)
template <class T>
bool ckmax(T &a, const T &b) {
  return a < b ? a = b, 1 : 0;
}  // set a = max(a,b)

template <class T, class U>
T fstTrue(T lo, T hi, U f) {
  ++hi;
  assert(lo <= hi);  // assuming f is increasing
  while (lo < hi) {  // find first index such that f is true
    T mid = lo + (hi - lo) / 2;
    f(mid) ? hi = mid : lo = mid + 1;
  }
  return lo;
}
template <class T, class U>
T lstTrue(T lo, T hi, U f) {
  --lo;
  assert(lo <= hi);  // assuming f is decreasing
  while (lo < hi) {  // find first index such that f is true
    T mid = lo + (hi - lo + 1) / 2;
    f(mid) ? lo = mid : hi = mid - 1;
  }
  return lo;
}

// signed main() {
int main() {
  // freopen(".in", "r",stdin);
  // freopen(".out","w",stdout);
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m;
  std::cin >> n >> m;
  vi a(n);
  for (auto &i : a) std::cin >> i;
  vc f(1 << n, vc(n, vc(m + 1, 0)));
  int mx = std::distance(a.begin(), std::max_element(all(a)));
  for (int s = 1; s < 1 << n; s++) {
    int pc = pct(s);
    if (pct(s) == 1) {
      int c = lowbit(s);
      int mn = std::max(a[mx] - a[c] + (mx < c), 0);
      for (int cho = mn; cho <= mn && cho <= m / n; cho++) {
        f[s][c][cho * n] = 1;
      }
    } else {
      for (int S = s; S > 0; S &= S - 1) {
        int c = lowbit(S);
        for (int SS = s ^ 1 << c; SS > 0; SS &= SS - 1) {
          int d = lowbit(SS);
          int mn = std::max(a[d] - a[c] + (d < c), 0);
          for (int sum = mn * (n - pc + 1); sum <= m; sum++) {
            f[s][c][sum] += f[s ^ 1 << c][d][sum - mn * (n - pc + 1)];
          }
        }
      }
    }
  }
  ll ans = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= m; j++)
      ans += f[(1 << n) - 1][i][j];
  }
  std::cout << ans << '\n';

  return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Pretests


Final Tests

Test #1:

score: 5
Accepted
time: 0ms
memory: 3588kb

input:

2 8
8950 8954

output:

2

result:

ok 1 number(s): "2"

Test #2:

score: 5
Accepted
time: 0ms
memory: 3588kb

input:

2 10
8841 8843

output:

2

result:

ok 1 number(s): "2"

Test #3:

score: 5
Accepted
time: 0ms
memory: 3652kb

input:

3 9
8765 8761 8765

output:

2

result:

ok 1 number(s): "2"

Test #4:

score: 5
Accepted
time: 0ms
memory: 3572kb

input:

3 8
8385 8385 8387

output:

6

result:

ok 1 number(s): "6"

Test #5:

score: 5
Accepted
time: 0ms
memory: 3568kb

input:

3 9
8581 8585 8582

output:

2

result:

ok 1 number(s): "2"

Test #6:

score: 5
Accepted
time: 1ms
memory: 4456kb

input:

8 100
8856 8864 8858 8860 8856 8863 8859 8857

output:

17589

result:

ok 1 number(s): "17589"

Test #7:

score: 5
Accepted
time: 1ms
memory: 4460kb

input:

8 100
8238 8239 8245 8244 8245 8244 8238 8244

output:

32475

result:

ok 1 number(s): "32475"

Test #8:

score: 5
Accepted
time: 1ms
memory: 4260kb

input:

8 100
9804 9806 9807 9802 9801 9803 9801 9806

output:

37012

result:

ok 1 number(s): "37012"

Test #9:

score: 5
Accepted
time: 4ms
memory: 11632kb

input:

10 200
8002 8014 8011 8013 8002 8003 8002 8016 8009 8004

output:

606309

result:

ok 1 number(s): "606309"

Test #10:

score: 5
Accepted
time: 8ms
memory: 11596kb

input:

10 200
8324 8323 8328 8322 8325 8328 8328 8323 8334 8323

output:

2504995

result:

ok 1 number(s): "2504995"

Test #11:

score: 5
Accepted
time: 4ms
memory: 11560kb

input:

10 200
9416 9415 9417 9404 9408 9409 9410 9416 9415 9411

output:

2553164

result:

ok 1 number(s): "2553164"

Test #12:

score: 5
Accepted
time: 4ms
memory: 11556kb

input:

10 200
9422 9430 9425 9425 9425 9423 9431 9428 9432 9434

output:

2687280

result:

ok 1 number(s): "2687280"

Test #13:

score: 5
Accepted
time: 47ms
memory: 62844kb

input:

12 300
9281 9292 9279 9280 9289 9291 9285 9279 9280 9281 9290 9281

output:

197821618

result:

ok 1 number(s): "197821618"

Test #14:

score: 5
Accepted
time: 52ms
memory: 62760kb

input:

12 300
9737 9726 9731 9736 9723 9727 9722 9732 9736 9733 9737 9728

output:

196607151

result:

ok 1 number(s): "196607151"

Test #15:

score: 5
Accepted
time: 40ms
memory: 62772kb

input:

12 300
8707 8708 8712 8704 8705 8704 8716 8711 8713 8712 8702 8710

output:

337047589

result:

ok 1 number(s): "337047589"

Test #16:

score: 5
Accepted
time: 53ms
memory: 62756kb

input:

12 300
9200 9194 9191 9195 9197 9192 9206 9206 9197 9198 9192 9202

output:

164570332

result:

ok 1 number(s): "164570332"

Test #17:

score: 5
Accepted
time: 187ms
memory: 215612kb

input:

13 500
8217 8233 8238 8217 8237 8237 8217 8217 8230 8234 8225 8223 8220

output:

1500488819

result:

ok 1 number(s): "1500488819"

Test #18:

score: 5
Accepted
time: 177ms
memory: 215612kb

input:

13 500
9781 9780 9772 9779 9785 9788 9788 9777 9791 9784 9782 9777 9768

output:

4627756434

result:

ok 1 number(s): "4627756434"

Test #19:

score: 5
Accepted
time: 159ms
memory: 215684kb

input:

13 500
8096 8078 8103 8104 8085 8089 8081 8085 8102 8095 8097 8100 8090

output:

1388414345

result:

ok 1 number(s): "1388414345"

Test #20:

score: 5
Accepted
time: 180ms
memory: 215788kb

input:

13 500
8739 8728 8743 8727 8730 8735 8733 8738 8731 8743 8728 8722 8722

output:

3106123719

result:

ok 1 number(s): "3106123719"

Extra Test:

score: 0
Extra Test Passed