QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#168248 | #2476. Pizzo Collectors | LaStataleBlue# | TL | 0ms | 1760kb | C++14 | 1.1kb | 2023-09-08 00:52:17 | 2023-09-08 00:52:17 |
Judging History
answer
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
constexpr int MAXN = 100'005;
int n;
int prime;
char s[MAXN];
int pizzo[100];
int maxpizzo = 0;
ll util(const int x, const int d)
{
if (d == n)
return pizzo[s[x]];
ll ans = 0;
for (int i = 0; i < prime; i++)
ans += util((x + i * d) % n, d * prime);
const int elems = n / d;
char cchar = 0;
for (int i = 0; i < elems; i++)
{
const char c = s[(x + i * d) % n];
if (c == '?')
;
else if (cchar == 0)
cchar = c;
else if (c != cchar)
cchar = '!';
}
int val = 0;
if (cchar == 0)
val = maxpizzo;
else if (cchar != '!')
val = pizzo[cchar];
int e = 0;
for (int i = d; i <= n; i *= prime)
e += elems;
ll ans2 = (ll)val * e;
return max(ans, ans2);
}
int main()
{
int n, k;
scanf("%d %s %d", &n, s, &k);
::n = n;
for (int i = 0; i < k; i++)
{
char c;
int v;
scanf(" %c %d ", &c, &v);
pizzo[c] = v;
maxpizzo = max(maxpizzo, v);
}
pizzo['?'] = maxpizzo;
for (int i = 2; i < n; i++)
if (n % i == 0)
{
prime = i;
break;
}
printf("%lld\n", util(0, 1));
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 1748kb
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: 0ms
memory: 1760kb
input:
4 ABCD 4 A 4 B 3 C 2 D 1
output:
10
result:
ok single line: '10'
Test #3:
score: -100
Time Limit Exceeded
input:
2 AB 2 A 1 B 2