寒假训练1

· · 个人记录

T1
洛谷同题
根据题意模拟即可,处理好字符串边界。
Code:

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int n;
string s;
int main(){
    cin>>n>>s;
    if(n%2==0) cout<<"No";
    else{
        bool f=1;
        for(int i=0;i<=(n+1)/2-2;i++){
            if(s[i]!='1') f=0;
        }
        if(s[(n+1)/2-1]!='/') f=0;
        for(int i=(n+1)/2;i<=n-1;i++){
            if(s[i]!='2') f=0;
        }
        if(f) cout<<"Yes";
        else cout<<"No";
    } 
    return 0;
}

T2
洛谷同题
一样根据题意模拟即可,处理好字符串边界。
Code:

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
string s;
bool f=1;
int t[26],len;
int main(){
    cin>>s;
    len=s.length();
    s=" "+s;
    if(len%2==1) f=0;
    for(int i=1;i<=len;i++){
        t[s[i]-'a']++;
        if(i<=len/2){
            if(s[2*i-1]!=s[2*i]) f=0;
        }
    }
    for(int i=0;i<26;i++){
        if(t[i]!=0 && t[i]!=2) f=0;
    }
    if(f) cout<<"Yes";
    else cout<<"No";
    return 0;
}

T3
洛谷同题
以/为起始点,开始向外扩展,扩展到不能扩展时记录下字符串长度,再对比。复杂度为O(n),可以通过本题。
Code:

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int n,ans;
string s;
int main(){
    cin>>n>>s;
    for(int i=0;i<n;i++){
        if(s[i]=='/'){
            int l=i,r=i;
            while(l>=0 && r<n){
                bool f=1;
                if(l-1>=0 && r+1<n && s[l-1]=='1' && s[r+1]=='2'){
                    l--;
                    r++;
                    f=0;
                }
                if(f) break;
            }
            ans=max(ans,r-l+1);
        }
    }
    cout<<ans;
    return 0;
}