Codeforces Round #780 (Div. 3)

A.有a枚面值为1,b枚面值为2的硬币,求最小不能购买的价值。当a=0时,最小不能购买为1,当a>0时,不能购买的价值为a+2b+1。

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define inf 0x3f3f3f3f
const int mod = 1e9 + 7;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a * b / gcd(a, b);}
using namespace std;

void solve() {
    ll a, b;
    scanf("%lld%lld", &a, &b);
    if (a == 0) {
        printf("1\n");
    }
    else {
        printf("%lld\n", a + 2 * b + 1);
    }
}

int main(int argc, char** argv) {
    int _t;
    scanf("%d", &_t);
    while (_t--)
        solve();
    return 0;
}

B.每次只吃一个糖果,选择当前最常见类型的糖果中的任何一种,他是否可以在不连续吃两个相同的糖果的情况下吃掉所有的糖果。

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define inf 0x3f3f3f3f
const int mod = 1e9 + 7;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a * b / gcd(a, b);}
using namespace std;

const int N = 2e5 + 10;
int a[N];

void solve() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    sort(a, a + n);
    if (a[n - 1] - 1 > a[n - 2]) {
        printf("NO\n");
    }
    else {
        printf("YES\n");
    }
}

int main(int argc, char** argv) {
    int _t;
    scanf("%d", &_t);
    while (_t--)
        solve();
    return 0;
}

C.一个字符串 a 即使同时满足两个条件:它的长度n是偶数;
对于所有奇数 i (1≤i≤n−1),满足 ai=ai+1。
感觉就是用贪心的算法计算符合条件的,然后相减就能得到答案。

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define inf 0x3f3f3f3f
const int mod = 1e9 + 7;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a * b / gcd(a, b);}
using namespace std;

int dp[30];

void solve() {
    memset(dp, 0, sizeof(dp));
    string str;
    cin >> str;
    int cnt = 0;
    for (int i = 0; i < str.size(); i++) {
        dp[str[i] - 'a']++;
        if (dp[str[i] - 'a'] == 2) {
            cnt += 2;
            memset(dp, 0, sizeof(dp));
        }
    }
    printf("%d\n", str.size() - cnt);
}

int main(int argc, char** argv) {
    int _t;
    scanf("%d", &_t);
    while (_t--)
        solve();
    return 0;
}

D.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值