zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 046 题解

    比赛链接:https://atcoder.jp/contests/abc046

    A - AtCoDeer and Paint Cans

    题目大意:
    (3) 个数中有多少个不同的数。

    解题思路:
    很多种解法,我是把数放到 set 里面去的。

    示例程序:

    #include <bits/stdc++.h>
    using namespace std;
    set<int> st;
    int a;
    int main() {
        for (int i = 0; i < 3; i ++) {
            cin >> a;
            st.insert(a);
        }
        cout << st.size() << endl;
        return 0;
    }
    

    B - Painting Balls with AtCoDeer

    题目大意:
    (N) 个球染 (K) 种颜色,要求相邻的两个求颜色不一样。问:方案数。

    解题思路:
    (K imes (K-1)^{N-1})

    示例程序:

    #include <bits/stdc++.h>
    using namespace std;
    int n, k, ans;
    int main() {
        cin >> n >> k;
        ans = k;
        for (int i = 1; i < n; i ++) ans *= k-1;
        cout << ans << endl;
        return 0;
    }
    

    C - AtCoDeer and Election Report

    题目大意:
    有两个比分 (T)(A),他们一直是增长的,有 (N) 个时刻,在第 (i) 个时刻你需要保证比分是 (T_i : A_i),问最终的 (T+A) 的最小值是多少。

    解题思路:
    这是一道模拟题。其中最需要考虑的地方时如果让比分从这一轮转到下一轮(代码中用 convert(a,b,c,d) 表示当前比分是 (a)(b),要转成币值为 (c:d) 的最小的 (a)(b))。

    示例程序:

    #include <bits/stdc++.h>
    using namespace std;
    // 将a和b转成c和d
    void convert(long long &a, long long &b, long long c, long long d) {
        long long tmp = __gcd(c, d);
        c /= tmp, d /= tmp;
        long long a1 = (a + c - 1) / c * c, b1 = a1 / c * d;
        long long b2 = (b + d - 1) / d * d, a2 = b2 / d * c;
        if (b1 < b) a = a2, b = b2;
        else if (a2 < a) a = a1, b = b1;
        else if (a1 < a2) a = a1, b = b1;
        else a = a2, b = b2;
    }
    int n;
    long long a, b, c, d;
    int main() {
        scanf("%d%lld%lld", &n, &a, &b);
        for (int i = 1; i < n; i ++) {
            scanf("%lld%lld", &c, &d);
            convert(a, b, c, d);
        }
        printf("%lld", a+b);
        return 0;
    }
    

    D - AtCoDeer and Rock-Paper

    题目大意:
    玩“石头-布”,告诉你对手的出手序列,你要设计一个出手序列,要求每一轮出布总数(le)出石头总数,问:最多能拿多少分。

    解题思路:
    这是一道智力题吧、
    经过思考发现就按照 (gpgpgpldots) 的顺序出即可。

    示例程序:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 100010;
    char s[maxn];
    int cnt, c11;
    int main() {
        cin >> s;
        for (int i = 0; s[i]; i ++) {
            if (i%2 == 0) {
                if (s[i] == 'p') cnt --;
            }
            else {
                if (s[i] == 'g') cnt ++;
            }
        }
        cout << cnt << endl;
        return 0;
    }
    
  • 相关阅读:
    Atitit 人脸识别 眼睛形态 attilax总结
    Atitit 手机号码选号 规范 流程 attilax总结 v2 r99.docx
    atitit 板块分类 上市公司 龙头企业公司 列表 attilax总结.docx
    Atititi atiitt eam pam资产管理 购物表去年.xlsx
    使用cmd查看电脑连接过的wifi密码(一)
    常见十大web攻击手段 悟寰轩
    常见web攻击方式 悟寰轩
    【MYSQL数据库】MYSQL学习笔记mysql分区基本操作 悟寰轩
    Filter及FilterChain的使用详解 悟寰轩
    启动tomcat spring初始化两次问题(eg:@PostConstruct) 悟寰轩
  • 原文地址:https://www.cnblogs.com/quanjun/p/14473915.html
Copyright © 2011-2022 走看看