新生賽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,剛好複習一下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章