• 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;
    }
    
  • 相关阅读:
    JSP 学习笔记1
    XML scriptlet 连接数据库
    JSP 定义行列数表单创建表格
    JSP_01
    JS创建表格完整
    04-基本的mysql语句
    03-MySql安装和基本管理
    02-数据库概述
    01-MySql的前戏
    爬虫系列
  • 原文地址:https://www.cnblogs.com/quanjun/p/14473915.html
Copyright © 2020-2023  润新知