QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#168256#2476. Pizzo CollectorsLaStataleBlue#RE 0ms1884kbC++141.2kb2023-09-08 01:53:042023-09-08 01:53:05

Judging History

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

  • [2023-09-08 01:53:05]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:1884kb
  • [2023-09-08 01:53:04]
  • 提交

answer

#include <cstdio>
#include <algorithm>
#include <utility>
using namespace std;
typedef long long ll;
constexpr int MAXN = 100'005;

char s[MAXN];
int n, prime, ln;
int pizzo[100];
int maxpizzo;

pair<ll, char> util(const int x, const int d, const int y)
{
	if (d == n)
		return {pizzo[(int)s[x]], s[x]};

	ll ans = 0;
	char cchar = '?';
	for (int i = 0; i < prime; i++)
	{
		const auto r = util((x + i * d) % n, d * prime, y + 1);
		ans += r.first;
		if (r.second == '?')
			;
		else if (cchar == '?')
			cchar = r.second;
		else if (r.second != cchar)
			cchar = '!';
	}

	int val = 0;
	if (cchar == '?')
		val = maxpizzo;
	else if (cchar != '!')
		val = pizzo[(int)cchar];

	return {max(ans, (ll)val * (ln - y + 1) * n / d), cchar};
}

int main()
{
	int n, k;
	scanf("%d %s %d", &n, s, &k);
	::n = n;
	maxpizzo = 0;
	for (int i = 0; i < k; i++)
	{
		char c;
		int v;
		scanf(" %c %d ", &c, &v);
		pizzo[(int)c] = v;
		maxpizzo = max(maxpizzo, v);
	}
	pizzo['?'] = maxpizzo;

	prime = 2;
	for (int i = 2; i < n; i++)
		if (n % i == 0)
		{
			prime = i;
			break;
		}
	ln = 0;
	for (int i = prime; i <= n; i *= prime)
		ln++;

	printf("%lld\n", util(0, 1, 0).first);
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 1700kb

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: 1884kb

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: 0ms
memory: 1752kb

input:

2
AB
2
A 1
B 2

output:

3

result:

ok single line: '3'

Test #4:

score: -100
Runtime Error

input:

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

output:


result: