QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#869328#2476. Pizzo CollectorsAngelOlanTL 1ms3712kbC++231.7kb2025-01-25 05:48:392025-01-25 05:48:40

Judging History

This is the latest submission verdict.

  • [2025-01-25 05:48:40]
  • Judged
  • Verdict: TL
  • Time: 1ms
  • Memory: 3712kb
  • [2025-01-25 05:48:39]
  • Submitted

answer

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

using i64 = long long;

#define SZ(x) ((int)x.size())
#define FOR(i,a,b) for(int i = (int)a; i < (int)b; i++)
#define ENDL '\n'

inline int add(int x, int y, int m) {
  return x + y < m ? x + y : x + y - m;
}

i64 f(int i, int j, string& s, vector<int>& val, const int mxVal, vector<int>& pw) {
  if (j == (int)pw.size() - 1) {
    return s[i] == '?' ? mxVal : val[s[i] - 'A'];
  }

  const int n = (int)s.size();

  int st = 0;
  char mn = 'Z', mx = '?';
  for (int k = i; st == 0 || k != i; k = add(k, pw[j], n)) { // 1
    if(s[k] == '?'){
      st |= (1 << 28);
    }
    else {
      st |= (1 << (s[k] - 'A'));
    }
    if(s[k] < mn) mn = s[k];
    if(s[k]>mx) mx = s[k];
  }

  auto full = [&](char c) -> i64 {
    i64 x = c == '?' ? mxVal : val[c - 'A'];
    return x * (n / pw[j]) * ((int)pw.size() - j);
  };

  int cnt_bits = __builtin_popcount(st);
  if (cnt_bits == 1) {
    return full(mn);
  }

  i64 ret = 0;
  if (cnt_bits == 2 && mn == '?') {
    ret = max(ret, full(mx));
  }

  i64 alt = f(i, j + 1, s, val, mxVal, pw);
  for (int k = add(i, pw[j], n); k != add(i, pw[j + 1], n); k = add(k, pw[j], n)) {
    alt += f(k, j + 1, s, val, mxVal, pw);
  }
  ret = max(ret, alt);
  return ret;
}

signed main() {
  cin.tie(0)->sync_with_stdio(0);

  int n;
  string s;
  int q;
  cin >> n >> s >> q;

  vector<int> val(26);
  while (q--) {
    char c;
    int v;
    cin >> c >> v;
    val[c - 'A'] = v;
  }

  int pr;
  for (pr = 2; n % pr; ++pr);
  vector<int> pw = {1};
  while (pw.back() != n) {
    pw.push_back(pw.back() * pr);
  }

  cout << f(0, 0, s, val, *max_element(val.begin(), val.end()), pw) << '\n';

  return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3712kb

input:

8
?A?B?A?C
3
A 1
B 1000
C 100000

output:

1301004

result:

ok single line: '1301004'

Test #2:

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

input:

4
ABCD
4
A 4
B 3
C 2
D 1

output:

10

result:

ok single line: '10'

Test #3:

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

input:

2
AB
2
A 1
B 2

output:

3

result:

ok single line: '3'

Test #4:

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

input:

7
???????
3
A 1
B 3
C 2

output:

42

result:

ok single line: '42'

Test #5:

score: -100
Time Limit Exceeded

input:

1
?
26
A 1
B 2
C 3
D 4
E 5
F 6
G 7
H 8
I 9
J 10
K 11
L 12
M 13
N 14
O 15
P 16
Q 17
R 18
S 19
T 20
U 21
V 22
W 23
X 24
Y 25
Z 26

output:


result: