【CodeForces訓練記錄】Codeforces Round 991 (Div. 3)

MNNUACM_2024ZY發表於2024-12-08

訓練情況

賽後反思

打到D題擺了,連續兩道數位的智慧題?可能我比較缺觀察

A題

記錄一下字串的長度,能塞到第一行的儘量塞到第一行。

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

using namespace std;

void solve(){
    int n,m; cin>>n>>m;
    vector<string> s(n + 1);
    for(int i = 1;i<=n;i++) cin>>s[i];
    int now = 0;
    for(int i = 1;i<=n;i++){
        if(now + s[i].size() <= m) now += s[i].size();
        else {
            cout<<i-1<<endl;
            return;
        }
    }
    cout<<n<<endl;
}

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

B題

奇數位置+1 -1,偶數位置+1 -1,我們發現無論如何操作,奇數位和偶數位上的總和都是不變的,所以我們只需要判斷奇數位和偶數位能否均攤成對應的長度即可。

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

using namespace std;

void solve(){
    int n; cin>>n;
    vector<int> a(n + 1);
    for(int i = 1;i<=n;i++) cin>>a[i];
    int ans1 = 0,ans2 = 0;
    for(int i = 1;i<=n;i++){
        if(i&1) ans1 += a[i];
        else ans2 += a[i];
    }
    int ji = (n+1)/2;
    int ou = n - ji;
    if(ans1%ji==0&&ans2%ou==0&&ans1/ji==ans2/ou) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
}

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

C題

顯然,是 \(9\) 的倍數,必須所有數位的和都是 \(9\) 的倍數,對答案有貢獻的只有數位 \(2\) 和數位 \(3\),他們對答案的貢獻分別是 \(2\)\(6\),所以我們只需要統計字串中數位 \(2,3\) 出現的次數,再判斷貢獻是否能將數位和變成 \(9\) 的倍數。

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

using namespace std;

void solve(){
    string s; cin>>s;
    int ans = 0;
    for(int i = 0;i<s.size();i++) ans += s[i] - '0';
    if(ans%9==0){
        cout<<"YES"<<endl;
        return;
    }
    int two = 0,three = 0;
    for(int i = 0;i<s.size();i++){
        if(s[i] == '3') three++;
        else if(s[i] == '2') two++;
    }
    int now = 9-ans%9;
    bool flag = false;
    for(int i = 0;i<=three;i++){
        if(i*6 > 18) break;
        for(int j = 0;j<=two;j++){
            if(i*6+j*2>18) break;
            if(i*6 + j*2 == now) flag = true;
            if(i*6 + j*2 == now+9) flag = true;
        }
    }
    if(flag) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
}

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

相關文章