Educational Codeforces Round 73 (Rated for Div. 2)

本文提供了四个C++编程竞赛的代码实例,涵盖了高效输入输出、动态规划、位运算和组合计数等技巧,通过实际案例解析了如何在竞赛中快速解决问题。

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

A:

#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long LL;
typedef unsigned long long ULL;
LL Gcd(LL a, LL b){if (b == 0) return a; return Gcd(b , a%b);}
LL Lcm(LL a, LL b){ return a/Gcd(a,b)*b;}
inline int read(){
    int f = 1, x = 0;char ch = getchar();
    while (ch > '9' || ch < '0'){if (ch == '-')f = -f;ch = getchar();}
    while (ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}
    return x * f;
}
const int maxn = 1e6 + 10;
int s[maxn];
map<int,int> mp;
int main(){
    //freopen("/Users/chutong/ACM/data.in","r",stdin);
    //freopen("/Users/chutong/ACM/data.out","w",stdout);
    int q = read();
    while(q--){
        mp.clear();
        int n = read();
        for(int i=1; i<=n; i++){
            s[i] = read();
            mp[s[i]]++;
        }
        int tag = 0;
        for(int i=0; i<20; i++){
            if (mp[(1 << i)] >= 2){
                //cout << (1 << i) << endl;
                mp[(1 << (i+1))] += mp[(1 << i)]/2;
            }
            if (mp[2048]) tag = 1;
        }
        if (tag) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
    return 0;
}

B:

#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long LL;
typedef unsigned long long ULL;
LL Gcd(LL a, LL b){if (b == 0) return a; return Gcd(b , a%b);}
LL Lcm(LL a, LL b){ return a/Gcd(a,b)*b;}
inline int read(){
    int f = 1, x = 0;char ch = getchar();
    while (ch > '9' || ch < '0'){if (ch == '-')f = -f;ch = getchar();}
    while (ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}
    return x * f;
}
const int maxn = 1e6 + 10;
int main(){
    //freopen("/Users/chutong/ACM/data.in","r",stdin);
    //freopen("/Users/chutong/ACM/data.out","w",stdout);
    int n = read();
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            if (i & 1){
                if (j & 1) putchar('W');
                else putchar('B');
            }else{
                if (j & 1) putchar('B');
                else putchar('W');
            }
        }
        putchar('\n');
    }
    return 0;
}

C:

#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long LL;
typedef unsigned long long ULL;
LL Gcd(LL a, LL b){if (b == 0) return a; return Gcd(b , a%b);}
LL Lcm(LL a, LL b){ return a/Gcd(a,b)*b;}
inline int read(){
    int f = 1, x = 0;char ch = getchar();
    while (ch > '9' || ch < '0'){if (ch == '-')f = -f;ch = getchar();}
    while (ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}
    return x * f;
}
#define int long long
const int maxn = 1e6 + 10;
int c,m,x;
bool check(int val){
    int l1 = c - val;
    int l2 = m - val;
    int l3 = x;
    if (l1 < 0 || l2 < 0) return false;
    if (l1 + l2 + l3 >= val) return true;
    else return false;
}
signed main(){
    //freopen("/Users/chutong/ACM/data.in","r",stdin);
    //freopen("/Users/chutong/ACM/data.out","w",stdout);
    int q = read();
    while(q--){
        c = read(),m = read(),x = read();
        int l = 1,r = max(c,m) + 1;
        while(l < r){
            int mid = (l + r) >> 1;
            if (check(mid)) l = mid + 1;
            else r = mid;
        }
        cout << l - 1 << endl;
    }
    return 0;
}

D:

#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long LL;
typedef unsigned long long ULL;
LL Gcd(LL a, LL b){if (b == 0) return a; return Gcd(b , a%b);}
LL Lcm(LL a, LL b){ return a/Gcd(a,b)*b;}
#define int long long
inline int read(){
    int f = 1, x = 0;char ch = getchar();
    while (ch > '9' || ch < '0'){if (ch == '-')f = -f;ch = getchar();}
    while (ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}
    return x * f;
}
const int maxn = 1e6 + 10;
LL dp[maxn][5],a[maxn],b[maxn];
signed main(){
    int T = read();
    while(T--){
        int n = read();
        for(int i=1;i<=n;i++){
            a[i] = read();
            b[i] = read();
        }
        for(int i=1;i<=n;i++){
            for(int j=0;j<5;j++){
                dp[i][j] = 1e18;
            }
        }
        for(int i=0; i<5; i++){
            dp[1][i] = b[1]*i;
        }
        for(int i=2;i<=n;i++){
            for(int j=0;j<5;j++){
                for(int k=0;k<5;k++){
                    if(a[i-1]+j!=a[i]+k){
                        dp[i][k]=min(dp[i][k],dp[i-1][j]+1ll*k*b[i]);
                    }
                }
            }
        }
        LL ans = LLONG_MAX;
        for(int i=0;i<5;i++)
            ans=min(ans,dp[n][i]);
        printf("%lld\n",ans);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值