新生赛002补题

第一次补题

J 签到 IGHE初级 FDB中等 AC中等偏难(初级对我来说就不简单了QAQ)

002比赛绝大部分题都没有思路,慢慢提升自己吧!

顺序比较混乱,是按照补题顺序来的。

先解决简单的题!
同学的题解连接

G - 0011

原题链接     G - 0011

之前做的时候没有想明白。看了同学发的题解顿悟了。悉心观察可以发现符合题意出现的01组合并不都是对称的出现的。之前做的时候出现了这种错误认知。
我们可以设置一个计数器n=0;将输入的数组从头到尾扫一遍,碰到0计数器n++,碰到1计数器n–;
另外,1.若在过程中出现n<0的情况,则说明出现了1在与其对应的0前面的情况,不符合题意;
若在情况1未发生的情况下出现了最终结果n>0,则说明出现了多余的0的情况,不符合题意;
最终的情况可以总结为只有过程中不出现n<0且最终n=0则输出YES;else cout<<no;
同时是第一次尝试C++

补题的时候出现了Compilation error   原因:提交代码的时候以C形式提交。

#include<cstdio>
#include<string.h>
using namespace std; 
int main()
{
	int len,n=0;
	int i,m;
    char s[1100];
    cin>>m;
    while(m--)
{    
    n=0;
	cin>>s;    
    len=strlen(s);
    for(i=0;i<len;i++)
    {
    	if(s[i]=='0')
    	n++;
    	else if(s[i]=='1')
    	n--;
    	if(n<0)
    	break;
    }
    if(n==0)
    cout<<"YES\n";
    else
    cout<<"NO\n";
} 
	return 0;
} 

H.Perfect String

题意 :给一个仅由a,b,c,?构成的字符串,要求把所有问号变成a/b/c,使任意相邻的两个字符不相同。
我的理解:两个字符不可以相同,同时间杂"?“出现。要求”?"变成与左右两个字符不相同的字符(仅限于a\b\c);

原题链接     H.Perfect String

#include<iostream>
#include<string.h>
#include<cstdio>
using namespace std;
int main()
{
	string s;// 定义一个字符串s
	int f,t,i;
	cin>>t;//输入数据组数
	while(t--)
	{
		cin>>s;//输入字符串内容
		f=1;//f来判断输出结果
		if(s[0]=='?')//判断特殊情况,
		{
			if(s[1]!='a') 
			s[0]='a';
			else if(s[1]!='b')
			s[0]='b';
			else if(s[1]!='c')
			s[0]='c';
		}
		for(i=0;i<s.length();i++)// s.length()  s字符串的长度
		{
			if(s[i]=='?')
			{
				if(s[i+1]!='a'&&s[i-1]!='a')
				s[i]='a';
				else if(s[i+1]!='b'&&s[i-1]!='b')
				s[i]='b';
				else if(s[i+1]!='c'&&s[i-1]!='c')
				s[i]='c';
			}
			else
			{
				if(s[i]==s[i+1])
				{
					f=0;break;
				}
			}
			if(f)cout<<s<<endl;
			else
			cout<<"-1\n";
		}
		
	}
	
	return 0;
}
c写法
#include<stdio.h>
int main()
{
	char s[100000];//注意数组必须开这么大。 之前开了一个s[100]超时错误了
	int f,t,i,x;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%s",s);
		f=1;
		if(s[0]=='?')
		{
			if(s[1]!='a') 
			s[0]='a';
			else if(s[1]!='b')
			s[0]='b';
			else if(s[1]!='c')
			s[0]='c';
		}
		x=strlen(s);
		for(i=0;i<x;i++)
		{
			if(s[i]=='?')
			{
				if(s[i+1]!='a'&&s[i-1]!='a')
				s[i]='a';
				else if(s[i+1]!='b'&&s[i-1]!='b')
				s[i]='b';
				else if(s[i+1]!='c'&&s[i-1]!='c')
				s[i]='c';
			}
			else
			
				if(s[i]==s[i+1])
				{
					f=0;break;
				}
			}
			if(f)printf("%s\n",s);
			else
			printf("-1\n");
		}
	return 0;
}

I.十进制中的二进制

I用到了DFS,刚好复习一下

发布了32 篇原创文章 · 获赞 6 · 访问量 1571

猜你喜欢

转载自blog.csdn.net/Pan_ZC/article/details/103829657
今日推荐