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;
}
原文地址:https://www.cnblogs.com/quanjun/p/14473915.html