Diary_3.4

1.Long Inversions

void solve(){
    int n;  cin >> n;
    string s;   cin >> s;
    s = ' '+s;
    int ans = 1;
    for(int k=n; k>=2; k--){
        vector<int> dif(n+k+1, 0);
        for(int i=1; i<=n && i+k-1<=n; i++){
            dif[i] = (dif[i]+dif[i-1]+2)%2;
            if(dif[i] == 1){
                if(s[i] == '1') dif[i]++, dif[i+k]--;
            }else{
                if(s[i] == '0') dif[i]++, dif[i+k]--;
            }
            dif[i] %= 2;
        }
        for(int i=n-k+2; i<=n; i++){
            dif[i] = (dif[i-1]+dif[i]+2)%2;
        }
        for(int i=1; i<=n; i++){
            if(dif[i]==1 && s[i]=='1')  goto lable;
            if(dif[i]==0 && s[i]=='0')  goto lable;
        }
        ans = k;
        break;
        lable: ;
    }
    cout << ans << endl;
}

2. Digital string maximization

void solve(){
    int n;  cin >> n;
    string s;   cin >> s;
    set<int> q;
    int end = sqrt(n)+1;
    for(int i=1; i<=end; i++){
        if(n%i == 0){
            q.insert(i);
            q.insert(n/i);
        }
    }
    for(auto &x: q){
        int cntr = 0, cntl = 0, pl = 0, pr = n-x;
        for(int k=0; k<n; k++){
            if(s[pl] != s[k]){
                cntl++;
            }
            if(s[pr] != s[k]){
                cntr++;
            }
            if(cntl>1 && cntr>1)    break;
            pl = (pl+1)%x;
            pr = n-x+pl;
        }
        if(cntl < 2 || cntr < 2){
            cout << x << endl;
            return;
        }
    }
}

3.Digital string maximization

void solve(){
    string s;   cin >> s;
    int n = s.size();
    for(int i=0; i<n; i++){
        int now = s[i]-'0';
        for(int k=0; k<now && i-k-1>=0; k++){
            if(s[i-k]-1 > s[i-k-1]){
                s[i-k]--;
                swap(s[i-k-1], s[i-k]);
            }
        }
    }
    cout << s << endl;
}

4. Adjacent Digit Sums

void solve(){
    int l, r;   cin >> l >> r;
    if(l == r-1){
        cout << "YES" << endl;
    }else{
        int last = r-1-l;
        if(last > 0){
            cout << "NO" << endl;
            return;
        }
        if(last % 9 == 0){
            cout << "YES" << endl;
        }else{
            cout << "NO" << endl;
        }
    }
}
posted @ 2025-03-04 09:11  Devpp  阅读(12)  评论(0)    收藏  举报