/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 320.0 KiB
#2 Wrong Answer 1ms 320.0 KiB
#3 Wrong Answer 9ms 572.0 KiB

Code

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

/*#ifndef ONLINE_JUDGE
#include "DEBUG.h"
#define bug(...)           __f (#__VA_ARGS__, __VA_ARGS__)
#endif*/

#define first_in_out       ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define int              long long int
#define double             long double
#define print(a)           for(auto x : a) cout << x << " ";
#define printpair(a)       for(auto x : a) cout << x.first << " " << x.second<<"\n";

int n, k;
string s;

int chk(int mid)
{
	int x = 0, a = 0;
	int res = 0;

	for (int i = 0; i < n; i++)
	{

		if (s[i] == 'A')
			a++;
		else if (s[i] == 'B')
			res += a;
		else if (s[i] == '?') {
			if (mid <= 0)
				continue;
			x++;
			a++, mid--;
		}
	}

	int rem = k - x;
	for (int i = n - 1; i >= 0; i--)
	{

		if (s[i] == 'A')
			a--;
		else if (s[i] == '?')
		{
			if (rem <= 0)
				continue;

			rem--;
			res += a;
		}

	}

	return res;
}



void solve()
{

	cin >> n >> k;
	cin >> s;

	int q = count(s.begin(), s.end(), '?');
	k = min(k, q);

	int left = 0, right = k, mid1, mid2, ans = chk(0);

	while (left <= right)
	{
		mid1 = left + (right - left) / 3;
		mid2 = right - (right - left) / 3;

		int aa = chk(mid1);
		int bb = chk(mid2);

		if (aa > bb)
		{
			ans = aa;
			left = mid1 + 1;
		}
		else if (bb > aa)
		{
			ans = bb;
			right = mid2 - 1;
		}
		else
		{
			left = mid1 + 1;
			right = mid2 - 1;
		}


	}

	for (int i = left; i <= right; i++)
		ans = max(ans, chk(i));

	cout << ans << "\n";




}


int32_t main()
{
	first_in_out

	int t = 1;
	cin >> t;

	while (t--)
		solve();

}

Information

Submit By
Type
Submission
Problem
P1110 Subsequence of AB
Language
C++17 (G++ 13.2.0)
Submit At
2024-11-08 16:16:24
Judged At
2024-11-11 02:22:44
Judged By
Score
1
Total Time
9ms
Peak Memory
572.0 KiB