Codeforces Round #712 (Div. 2)ABC题解

A题,遍历每个位置,找到在这个位置对称的位置是否为’a’,如果不是那么把’a’插在这个位置

#include<bits/stdc++.h>
using namespace std;
int t,n;
int main()
{
    
    
	scanf("%d",&t);
	while(t--)
	{
    
    
		string s;
		cin>>s;
		n=s.size();
		int p=-1;
		for(int i=0;i<n;i++)
		{
    
    
			if(s[n-1-i]!='a')
			{
    
    
				p=i;
				break;
			}
		}
		if(p==-1)
		{
    
    
			puts("NO");
			continue;
		}
		puts("YES");
		for(int i=0;i<p;i++)cout<<s[i];
		cout<<'a';
		for(int i=p;i<n;i++)cout<<s[i];
		puts("");
	}
	return 0;
}

B题,预处理 s 1 s1 s1串的 01 01 01数量差,用 s u m sum sum存下,在从后往前遍历,若2个串在这个位置不同,那么把 s 1 s1 s1串翻转,用f来存翻转次数,翻转2次等于没翻

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e5+10;
int t,n,m,a[N];
int sum[N];
int main()
{
    
    
	scanf("%d",&t);
	while(t--)
	{
    
    
		string s1,s2;
		scanf("%d",&n);
		cin>>s1>>s2;
		s1=' '+s1;
		s2=' '+s2;
		for(int i=1;i<=n;i++)
		{
    
    
			if(s1[i]=='1')sum[i]=sum[i-1]+1;
			else sum[i]=sum[i-1]-1;
		}
		bool f=0,ff=0;
		for(int i=n;i>=1;i--)
		{
    
    
			if(!f)
			{
    
    
				if(s1[i]!=s2[i])
				{
    
    
					if(!sum[i])f=1;
					else
					{
    
    
						ff=1;
						break;
					}
				}
			}
			else
			{
    
    
				if(s1[i]==s2[i])
				{
    
    
					if(!sum[i])f=0;
					else
					{
    
    
						ff=1;
						break;
					}
				}
			}
		}
		if(ff)puts("NO");
		else puts("YES");
	}
	return 0;
}

C题,简单的构造题,首先要知道首尾不能出现0且0的个数为偶数,然后前面一半的1为’(’,后面一半的1为’)’,然后一对0中第一个0为‘(’,第二个0为’)’

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int tt,n;
string s;
char t[N];
int main()
{
    
    
	scanf("%d",&tt);
	while(tt--)
	{
    
    
		scanf("%d",&n);
		cin>>s;
		if(s[0]=='0'||s[n-1]=='0')
		{
    
    
			puts("NO");
			continue;
		}
		int cnt=0;
		for(int i=0;i<n;i++)if(s[i]=='1')cnt++;
		if(cnt&1)
		{
    
    
			puts("NO");
			continue;
		}
		puts("YES");
		int c=0,c1=0;
		for(int i=0;i<n;i++)
		{
    
    
			if(s[i]=='1')
			{
    
    
				c++;
				if(c<=cnt/2)printf("("),t[i]='(';
				else printf(")"),t[i]=')';
			}
			else
			{
    
    
				if(c1)c1=0,printf(")"),t[i]=')';
				else c1=1,printf("("),t[i]='(';
			}
		}
		puts("");
		for(int i=0;i<n;i++)
		{
    
    
			if(s[i]=='1')printf("%c",t[i]);
			else if(t[i]=='(')printf(")");
			else printf("(");
		}
		puts("");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_46001550/article/details/115425364