【Atcoder訓練記錄】AtCoder Beginner Contest 381

MNNUACM_2024ZY發表於2024-11-23

訓練情況

賽後反思

簡單題A題做紅溫了,怒吃 6 罰時,C題雙指標其實差不多想出來了,但是對於判斷字串合法其實可以只判斷兩個端點,不需要全部遍歷,中途還想了二分做法(?),然而寫到最後發現並沒有二分單調性。

A題

記得判斷字串的長度必須是奇數,\(1 \sim \frac{n+1}{2}-1\)1\(\frac{n+1}/2\)/\(\frac{n+1}{2}+1 \sim n\)2。滿足上述所有條件就輸出 Yes,否則輸出 No

#include <bits/stdc++.h>
#define int long long
#define endl '\n'

using namespace std;

void solve(){
    int n;
    char s[107];
    cin>>n;
    getchar();
    for(int i = 1;i<=n;i++) cin>>s[i];
    bool flag = true;
    if(n%2==0) flag = false;
    for(int i = 1;i<=(n+1)/2-1;i++) if(s[i] != '1') flag = false;
    if(s[(n+1)/2] != '/') flag = false;
    for(int i = (n+1)/2+1;i<=n;i++) if(s[i] != '2') flag = false;
    if(flag) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

B題

判斷 \(2i - 1\)\(2i\) 上的字元是否相同,字串中每一個字母出現的次數均為 \(2\),滿足上述所有條件輸出 Yes,否則輸出 No

#include <bits/stdc++.h>
#define int long long
#define endl '\n'

using namespace std;

void solve(){
    char s[107]; cin>>s+1;
    int n = strlen(s+1);
    bool flag = true;
    if(n&1) flag = false;
    for(int i = 1;i<=n/2;i++) if(s[2*i-1] != s[2*i]) flag = false;
    map<char,int> cnt;
    for(int i = 1;i<=n;i++) cnt[s[i]]++;
    for(auto i:cnt) if(i.second != 2) flag = false;
    if(flag) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

C題

判斷字串中的滿足 11/22 序列最長的子串長度,我們發現序列必須 / 在中間,所以我們考慮列舉 / 的位置再使用雙指標往兩邊找,左邊必須是 1,右邊必須是 2,滿足條件就 l--,r++ 擴大範圍,最後答案取子串長度 \(r-l+1\) 的最大值。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'

using namespace std;

void solve(){
    int n; string s;
    cin>>n>>s;
    int ans = 0;
    for(int i = 0;i<n;i++){
        if(s[i] != '/') continue;
        int l = i;
        int r = i;
        while(l-1>=0&&r-1<=n-1&&s[l-1] == '1'&&s[r+1]=='2'){
            l--,r++;
        }
        ans = max(ans,r-l+1);
    }
    cout<<ans<<endl;
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

相關文章