Codeforces Round #780 (Div. 3) A ~ F2

本文详细解析了Codeforces Round #780 (Div. 3)的六道题目,包括Vasya和Coins的最小未支付金额、Vlad和Candies的糖果吃完策略、Get an Even String的最少删除次数、Maximum Product Strikes Back的最大乘积优化、Matrix and Shifts的最小变换次数以及Promising String的子串判断方法。涉及动态规划、贪心算法和矩阵变换等编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A. Vasya and Coins

题意:
给定 a a a 个一元硬币和 b b b 个二元硬币,求最小不能支付的金额。
思路:
a > 0 a > 0 a>0,则可以支付出所有不大于 a + 2 ∗ b a + 2 * b a+2b 的金额;否则,无法支付出 1 1 1 的金额。
代码:

void solve() {
   
    ll a, b;
    cin >> a >> b;
    if(!a) {
   
        cout << "1\n";
        return;
    }
    cout << a + 2 * b + 1 << "\n";
}

B. Vlad and Candies

题意:
给定 n n n 个种类的糖果的颗数,每次只能选择当前数量最多的糖果且不能连续吃两颗相同种类的糖果,问是否能把糖果吃完。
思路:
定义一个集合,每次循环选择集合内的糖果。首先加入数量最多的糖果,接下来在吃糖果的过程中加入任何与集合内糖果的数量相差不超过 1 1 1 的糖果。因此,只需考虑最多的两种糖果(如果存在的话)相差是否大于 1 1 1 即可。
代码:

void solve() {
   
    int n;
    cin >> n;   
    vector<ll> a(n);
    for(int i = 0; i < n; ++i) {
   
        cin >> a[i];
    }
    if(n == 1) {
   
        if(a[0] > 1) cout << "NO\n";
        else cout << "YES\n";
        return;
    }
    sort(a.begin(), a.end(), greater<ll>());
    if(a[0] - a[1] > 1) {
   
        cout << "NO\n";
    } else {
   
        cout << "YES\n";
    }
}

C. Get an Even String

题意:
定义一个字符串为偶串,当且仅当该字符串形如 a a b b c c d d … … aabbccdd…… aabbccdd。给定一个字符串,求将其变为偶串最小删除字符的数量。
思路:
采用dp,定义 d p [ i ] dp[i] dp[i] 为前 i i i 个字符最大保留字符的数量,则答案为 n − d p [ n ] n - dp[n] ndp[n]
可以预处理出每个字符上一个与它相等的字符的位置,状态转移方程为:
d p [ i ] = m a x ( d p [ i − 1 ] , d p [ p r e [ i ] − 1 ] + 2 ) dp[i] = max(dp[i - 1], dp[pre[i] - 1] + 2) dp[i]=max(dp[i1],dp[pre[i]1]+2)
代码:

void solve() {
   
    string s;
    cin >> s;
    int n = s.size();
    s = " " + s;
    vector<int> pos(26), pre(n + 1);
    for(int i = 1; i <= n; ++i) {
   
        pre[i] = pos[s[i] - 'a'];
        pos[s[i] - 'a'] = i;
    }
    vector<int> dp(n + 1);
    for(int i = 1; i <= n;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值