社区讨论

全WA求助

P8471[Aya Round 1 F] 琪露诺的选择题参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo8cym3h
此快照首次捕获于
2023/10/27 16:35
2 年前
此快照最后确认于
2023/10/27 16:35
2 年前
查看原帖
CPP
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <stack>
#include <cstring>
#include <string>
#include <vector>
#define N 100005
#define ls(x) x<<1
#define rs(x) x<<1|1
#define mod 1000000007
using namespace std;
int t,n,a,e,b[205];
char ans[200005];
int main() {
	scanf("%d",&t);
	while(t--) {
		int p;
		scanf("%d%d%d",&n,&a,&e);
		p=a;
		memset(b,0,sizeof(b));
		string s;
		cin>>s;
		for(int i=0; i<s.size(); ++i) {
			++b[s[i]];
		}
		if(b['A']>e) {
			a-=b['A']-e;
			b['A']=e;
			if(a&1) {
				puts("-1");
				continue;
			} else {
				for(int i=0; i<2*n; ++i)
					ans[i]='B';
				int i,j;
				for(i=0,j=0; j<b['A']-e&&i<2*n; ++i) {
					if(s[i]=='A')
						++j,ans[i]='A';
				}
				if(j!=b['A']-e) {
					puts("-1");
					continue;
				}
			}
		} else {
			a-=e-b['A'];
			b['A']=e;
			for(int i=0; i<2*n; ++i)
				ans[i]='B';
			int i,j;
			for(i=0,j=0; j<b['A']-e&&i<2*n; ++i) {
				if(s[i]=='B')
					++j,ans[i]='A';
			}
			if(j!=b['A']-e) {
				puts("-1");
				continue;
			}
		}
		int i,j1,j2;
		for(i=0,j1=0,j2=0; i<2*n&&(j1<e/2||j2<e/2); ++i) {
			if(s[i]=='A'&&j1<e/2) {
				++j1;
				ans[i]='A';
			} else {
				if(s[i]=='B'&&j2<e/2) {
					++j2;
					ans[i]='A';
				}
			}
		}
		if(j1!=a/2||j2!=a/2) {
			puts("-1");
			continue;
		}
		
		for(int i=0;i<2*n;++i)
			putchar(ans[i]);
		putchar('\n');
	}
	return 0;
}
/*
1000
101
111
10
1 3 3 5
*/
思路是一开始全部变为B把每一次填A转换为+和-错误的个数(一开始为答案中A的出现次数),然后还剩下就两个交替,样例过了,但全wa

回复

4 条回复,欢迎继续交流。

正在加载回复...