QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#351862#8228. 排序yaoxi_std100 ✓3354ms11896kbC++142.2kb2024-03-12 16:39:452024-03-12 16:39:46

Judging History

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

  • [2024-03-12 16:39:46]
  • 评测
  • 测评结果:100
  • 用时:3354ms
  • 内存:11896kb
  • [2024-03-12 16:39:45]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define debug(fmt, ...) \
  fprintf(stderr, "[%d] " fmt "\n", __LINE__, ##__VA_ARGS__)
template <class _Tx, class _Ty>
inline void chkmin(_Tx& x, const _Ty& y) { if (y < x) x = y; }
template <class _Tx, class _Ty>
inline void chkmax(_Tx& x, const _Ty& y) { if (x < y) x = y; }
bool Mbe;
using ll = long long;
constexpr int N = 32, S = 1 << 20, mod = 1e9 + 7;
int n, m, tot, d[N], mxc[N], prd[N];
struct dat {
  int mx, cnt;
  dat push(int x) const {
    return {mx + x, cnt};
  }
  friend dat operator+(const dat& lhs, const dat& rhs) {
    if (lhs.mx > rhs.mx) return lhs;
    if (lhs.mx < rhs.mx) return rhs;
    return {lhs.mx, (lhs.cnt + rhs.cnt) % mod};
  }
} dp[S];
int calc(int msk, int p) {
  int num = 0;
  vector<int> v(n);
  for (int i = 0; i < n; ++i) v[i] = (msk >> i & 1) << 1;
  v[p] = 1;
  for (int i = 1; i < m; ++i) {
    for (int j = 0; j < d[i]; ++j) {
      for (int x = j; x < n; x += d[i]) {
        for (int y = x; y - d[i] >= 0 && v[y] > v[y - d[i]]; y -= d[i]) {
          swap(v[y], v[y - d[i]]);
          if (v[y] == 1) ++num;
        }
      }
    }
  }
  return num;
}
bool Med;
int main() {
  // debug("Mem: %.4lfMB.", fabs(&Med - &Mbe) / 1048576);
  cin.tie(0)->sync_with_stdio(0);
  cin >> n >> m;
  for (int i = 0; i < m; ++i) cin >> d[i];
  prd[0] = 1;
  for (int i = 0; i < d[0]; ++i) {
    mxc[i] = n / d[0] + (i < n % d[0]);
    prd[i + 1] = prd[i] * (mxc[i] + 1);
  }
  tot = prd[d[0]];
  int fst = 0;
  for (int i = 0; i < d[0]; ++i)
    fst += mxc[i] * (mxc[i] - 1) / 2;
  dp[0] = dat{fst, 1};
  for (int s = 0; s < tot; ++s) {
    int msk = 0;
    for (int i = 0; i < d[0]; ++i) {
      int t = s / prd[i] % (mxc[i] + 1);
      for (int j = 0; j < t; ++j) msk |= 1 << (j * d[0] + i);
    }
    for (int i = 0; i < d[0]; ++i) {
      int t = s / prd[i] % (mxc[i] + 1);
      if (t == mxc[i]) continue;
      int p = t * d[0] + i;
      dp[s + prd[i]] = dp[s + prd[i]] + dp[s].push(calc(msk, p));
    }
  }
  cout << dp[tot - 1].mx << ' ' << dp[tot - 1].cnt << '\n';
  return 0;
}
/*
g++ -std=c++14 -O2 -o QOJ8228 QOJ8228.cpp
-Wall -Wextra -Wshadow
-fsanitize=address,undefined -g
*/

详细

Subtask #1:

score: 18
Accepted

Test #1:

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

input:

2 2
2 1

output:

1 1

result:

ok 2 number(s): "1 1"

Test #2:

score: 0
Accepted
time: 0ms
memory: 3628kb

input:

5 4
5 4 2 1

output:

6 4

result:

ok 2 number(s): "6 4"

Test #3:

score: 0
Accepted
time: 0ms
memory: 3716kb

input:

8 4
6 3 2 1

output:

15 4

result:

ok 2 number(s): "15 4"

Test #4:

score: 0
Accepted
time: 1ms
memory: 3632kb

input:

8 6
8 7 5 4 2 1

output:

14 2

result:

ok 2 number(s): "14 2"

Test #5:

score: 0
Accepted
time: 1ms
memory: 3716kb

input:

8 3
8 7 1

output:

22 7

result:

ok 2 number(s): "22 7"

Test #6:

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

input:

8 1
1

output:

28 1

result:

ok 2 number(s): "28 1"

Subtask #2:

score: 27
Accepted

Dependency #1:

100%
Accepted

Test #7:

score: 27
Accepted
time: 0ms
memory: 3668kb

input:

16 2
6 1

output:

77 15

result:

ok 2 number(s): "77 15"

Test #8:

score: 0
Accepted
time: 17ms
memory: 3720kb

input:

16 8
10 9 8 7 6 5 4 1

output:

57 5

result:

ok 2 number(s): "57 5"

Test #9:

score: 0
Accepted
time: 20ms
memory: 3684kb

input:

16 10
10 9 8 7 6 5 4 3 2 1

output:

57 3

result:

ok 2 number(s): "57 3"

Test #10:

score: 0
Accepted
time: 16ms
memory: 3724kb

input:

16 7
10 9 8 6 5 4 1

output:

49 1

result:

ok 2 number(s): "49 1"

Test #11:

score: 0
Accepted
time: 4ms
memory: 3676kb

input:

16 4
7 6 2 1

output:

52 9

result:

ok 2 number(s): "52 9"

Subtask #3:

score: 21
Accepted

Dependency #2:

100%
Accepted

Test #12:

score: 21
Accepted
time: 4ms
memory: 3684kb

input:

22 3
5 3 1

output:

100 1

result:

ok 2 number(s): "100 1"

Test #13:

score: 0
Accepted
time: 0ms
memory: 3644kb

input:

22 1
1

output:

231 1

result:

ok 2 number(s): "231 1"

Test #14:

score: 0
Accepted
time: 144ms
memory: 4480kb

input:

22 4
10 8 3 1

output:

97 4

result:

ok 2 number(s): "97 4"

Test #15:

score: 0
Accepted
time: 161ms
memory: 4484kb

input:

22 5
10 7 6 3 1

output:

92 70

result:

ok 2 number(s): "92 70"

Test #16:

score: 0
Accepted
time: 178ms
memory: 4472kb

input:

22 6
10 9 8 7 3 1

output:

97 1

result:

ok 2 number(s): "97 1"

Test #17:

score: 0
Accepted
time: 244ms
memory: 4456kb

input:

22 10
10 9 8 7 6 5 4 3 2 1

output:

109 1

result:

ok 2 number(s): "109 1"

Subtask #4:

score: 10
Accepted

Test #18:

score: 10
Accepted
time: 4ms
memory: 3748kb

input:

14 2
10 1

output:

61 210

result:

ok 2 number(s): "61 210"

Test #19:

score: 0
Accepted
time: 0ms
memory: 3644kb

input:

18 2
2 1

output:

117 1

result:

ok 2 number(s): "117 1"

Test #20:

score: 0
Accepted
time: 724ms
memory: 7708kb

input:

30 2
9 1

output:

264 84

result:

ok 2 number(s): "264 84"

Test #21:

score: 0
Accepted
time: 564ms
memory: 6864kb

input:

29 2
9 1

output:

253 36

result:

ok 2 number(s): "253 36"

Test #22:

score: 0
Accepted
time: 90ms
memory: 4356kb

input:

25 2
8 1

output:

195 8

result:

ok 2 number(s): "195 8"

Subtask #5:

score: 24
Accepted

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

100%
Accepted

Test #23:

score: 24
Accepted
time: 1854ms
memory: 11896kb

input:

30 4
10 9 5 1

output:

188 40

result:

ok 2 number(s): "188 40"

Test #24:

score: 0
Accepted
time: 3111ms
memory: 11836kb

input:

30 9
10 9 8 7 6 5 4 3 1

output:

184 6

result:

ok 2 number(s): "184 6"

Test #25:

score: 0
Accepted
time: 2861ms
memory: 11856kb

input:

30 8
10 9 8 7 4 3 2 1

output:

154 1

result:

ok 2 number(s): "154 1"

Test #26:

score: 0
Accepted
time: 2909ms
memory: 11848kb

input:

30 8
10 8 7 6 5 4 3 1

output:

155 1

result:

ok 2 number(s): "155 1"

Test #27:

score: 0
Accepted
time: 2405ms
memory: 11840kb

input:

30 6
10 8 6 4 3 1

output:

150 4

result:

ok 2 number(s): "150 4"

Test #28:

score: 0
Accepted
time: 3354ms
memory: 11784kb

input:

30 10
10 9 8 7 6 5 4 3 2 1

output:

184 6

result:

ok 2 number(s): "184 6"

Test #29:

score: 0
Accepted
time: 1701ms
memory: 9796kb

input:

29 6
10 9 7 5 3 1

output:

129 200

result:

ok 2 number(s): "129 200"

Extra Test:

score: 0
Extra Test Passed