【CodeForces训练记录】Codeforces Round 991 (Div. 3)

训练情况

赛后反思

打到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;
}
posted @   MNNUACM_2024ZY  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示