牛客周賽48

薛定谔的AC發表於2024-06-25

比賽連結:牛客周賽48


A

思路

因為只能+1,所以選擇最大的數字作為三個數字操作後的重點,所以求出最後的結果為max(a, b, c) * 3,再減去當前的數字大小就可以知道需要操作多少次了。

程式碼

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5 + 10;

int main() {
    int a, b, c;
    cin >> a >> b >> c;
    cout << max(a, max(b, c)) * 3 - a - b - c << endl;
    
    return 0;
}

B

思路

依次列舉區間左端點,然後固定左端點,列舉右端點,暴力查詢偽迴文數之和。

程式碼

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    cin >> s;

    int len = s.length();
    s = " " + s;
    
    int res = 0;
    for (int i = 1; i <= len; i++) {
        for (int j = i + 1; j <= len; j++) {
            int l = i, r = j, ans = 0;
            while (l <= r) {
                if (s[l++] != s[r--]) ans++;
            }
            res += ans;
        }
    }
    
    cout << res << endl;
    
    return 0;
}

C

思路

程式碼

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
const int N = 1e5 + 10;
 
vector<pair<int, int>>ve;
int main() {
    int n, count = 0;
    cin >> n;
    string s1, s2;
    cin >> s1 >> s2;
    
    s1 = " " + s1, s2 = " " + s2;
    
    for (int i = 1; i <= n; i++) {
        if (s1[i] == s2[i]) continue;
        // 只剩最後一個元素不同時,無解
        if (i + 1 > n) count = -2;
        if (s1[i] == '1') {
            s1[i] = '0', s1[i + 1] = (s1[i + 1] == '0' ? '1' : '0');
        }
        else {
            s1[i] = '1', s1[i + 1] = (s1[i + 1] == '1' ? '0' : '1');
        }
        count ++;
        ve.push_back({i, i + 1});
    }
    
    cout << count << endl;
    
    //特判無解的情況
    if (count == -1) return 0;
    for (int i = 0; i < count; i++) {
        cout << ve[i].first << " " << ve[i].second << endl;
    }
    
    return 0;
}

D

思路

程式碼



E

思路

程式碼



F

思路

程式碼