天天看點

Codeforces Round #748 (Div. 3) A.B

A.Elections

題目大意: 三個人參加選舉,給出目前三個人的得票數,得票最高者勝出。要求求出對于三個人最少應該再得幾票勝出。

思路: 對于目前的人,求出剩下兩人中的較大值,然後直接求差+1即可。

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

inline void solve(){
    int a, b, c; cin >> a >> b >> c;
    if(a > b && a > c) cout << 0 << ' ';
    else{
        int maxbc = max(b, c);
        cout << maxbc - a + 1 << ' '; 
    }
    if(b > a && b > c) cout << 0 << ' ';
    else{
        int maxac = max(a, c);
        cout << maxac - b + 1 << ' ';
    }
    if(c > a && c > b) cout << 0 << endl;
    else{
        int maxab = max(a, b);
        cout << maxab - c + 1 << endl;
    }
}

signed main(){
    int t = 0; cin >> t;
    while(t--) solve();
    return 0;
}
           

B.Make it Divisible by 25

題目大意: 對于給定的數字,每次可以删除一個數字,求一個最小的删除次數,使得删完數字後為 25 25 25的倍數。

思路: 首先考慮能被 25 25 25整除的倍數規律: . . . 25 、 . . . 75 、 . . . 50 、 . . . 00 ...25、...75、...50、...00 ...25、...75、...50、...00。

因為題目保證答案一定存在,是以直接倒序周遊,然後先檢測 5 5 5和 0 0 0,再分類單獨讨論即可。

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

inline void solve(int ans = 1e9){
    string str; cin >> str;
    for(int i = str.size() - 1; i > 0; i--){
        int len0 = str.size() - i - 1; 
        if(str[i] == '5'){
            for(int j = i - 1; j >= -1; j--){
                if(j < 0) { len0 = 1e9; break; }
                if(str[j] == '2' || str[j] == '7') break;
                else len0++;
            }
        }
        else if(str[i] == '0'){
            for(int j = i - 1; j >= -1; j--){
                if(j < 0) { len0 = 1e9; break; }
                if(str[j] == '0' || str[j] == '5') break;
                else len0++;
            }
        }
        if(str[i] == '5' || str[i] == '0') ans = min(ans, len0);
    }
    cout << ans << endl;
}

int main(){
    int t = 0; cin>> t;
    while(t--) solve();
    return 0;
}
           

繼續閱讀