QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#869328 | #2476. Pizzo Collectors | AngelOlan | TL | 1ms | 3712kb | C++23 | 1.7kb | 2025-01-25 05:48:39 | 2025-01-25 05:48:40 |
Judging History
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