PTA 520 钻石争霸赛 2020

比赛链接:https://pintia.cn/problem-sets/1259839299727368192/problems/type/7

7-1 考试周 (5分)

代码一

#include <bits/stdc++.h>
using namespace std;
int main() {
    int a, b; cin >> a >> b;
    printf("%d/%.1f=%d\n", a, 1.0 * a / b, b);
}

代码二

#include <bits/stdc++.h>
using namespace std;
int main() {
    int a, b; cin >> a >> b;
    for (int i = 1; i <= 300; i++) {
        if (i * b >= 10 * a) {
            printf("%d/%.1f=%d\n", a, i / 10.0, b);
            break;
        }
    }
}

7-2 真的恭喜你 (10分)

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n; cin >> n;
    if (n >= 90) 
        printf("gong xi ni kao le %d fen!\n", n);
    else
        printf("kao le %d fen bie xie qi!\n", n);
}

7-3 平均成绩 (10分)

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n; cin >> n;
    int all = 0, boy = 0, girl = 0;
    int boy_n = 0, girl_n = 0;
    for (int i = 0; i < n; i++) {
        int sex, score; cin >> sex >> score;
        if (sex == 1) boy += score, ++boy_n;
        else girl += score, ++girl_n;
        all += score;
    }
    printf("%.1f ", 1.0 * all / n);
    if (boy_n == 0) printf("X ");
    else printf("%.1f ", 1.0 * boy / boy_n);
    if (girl_n == 0) printf("X");
    else printf("%.1f", 1.0 * girl / girl_n);
}

7-4 古风A+B (15分)

#include <bits/stdc++.h>
using namespace std;
int main() {
    int a, b; cin >> a >> b;
    for (char c : to_string(a + b))
        cout << c << "\n";
}

7-5 猜近似数字 (15分)

代码一

#include <bits/stdc++.h>
using namespace std;
int main() {
    string s; cin >> s;
    string t;
    while (cin >> t and t != "-1") {
        if (t.size() != s.size()) {
            cout << "No" << "\n";
            continue;
        }
        int cnt = 0;
        for (int i = 0; i < t.size(); i++) {
            if (abs(t[i] - s[i]) == 1)
                ++cnt;
            else if (abs(t[i] - s[i]) > 1) {
                cnt = 2;
                break;
            }
        }
        cout << (cnt <= 1 ? "Yes" : "No") << "\n";
    }
}

代码二

#include <bits/stdc++.h>
using namespace std;
int main() {
    string s; cin >> s;
    map<string, bool> mp;
    mp[s] = true;
    for (int i = 0; i < s.size(); i++) {
        char t = s[i];
        if (t - 1 >= '0') {
            s[i] = t - 1;
            mp[s] = true;
        }
        if (t + 1 <= '9') {
            s[i] = t + 1;
            mp[s] = true;
        }
        s[i] = t;
    }
    string t;
    while (cin >> t and t != "-1")
        cout << (mp[t] ? "Yes" : "No") << "\n";
}

7-6 随机输一次 (20分)

#include <bits/stdc++.h>
using namespace std;

map<string, string> win = {
    {"ChuiZi", "Bu"},
    {"JianDao", "ChuiZi"},
    {"Bu", "JianDao"}
}, lose = {
    {"ChuiZi", "JianDao"},
    {"JianDao", "Bu"},
    {"Bu", "ChuiZi"}
};

int main() {
    int n; cin >> n;
    int a[n] = {};
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }    
    for (int i = 0; i < n; i = (i + 1) % n) {
        for (int j = 0; j < a[i]; j++) {
            string s; cin >> s;
            if (s == "End") return 0;
            cout << win[s] << "\n";
        }
        string s; cin >> s;
        if (s == "End") return 0;
        cout << lose[s] << "\n";
    }
}

7-7 阶乘的非零尾数 (20分)

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
const int mod = 1e9;
const int N = 1e7 + 100;

int a[N], five, zero;

int main() {
    int n, k; cin >> n >> k;
    iota(a, a + n + 1, 0);
    for (int i = 1; i <= n; i++) {
        while (a[i] % 5 == 0) {
            a[i] /= 5;
            ++five;
        }
    }
    for (int i = 1; i <= n; i++) {
        while (five and a[i] % 2 == 0) {
            a[i] /= 2;
            --five;
            ++zero;
        }
    }
    ll fac = 1;
    for (int i = 1; i <= n; i++) {
        fac *= a[i];
        fac %= mod;
    }
    string s = string(k, '0') + to_string(fac);
    cout << s.substr(s.size() - k, k) << ' ' << zero << "\n";
}

7-8 三足鼎立 (25分)

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
    int n, p; cin >> n >> p;
    int a[n] = {};
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    sort(a, a + n);
    ll ans = 0;
    for (int i = 0; i < n; i++) {
        int mi = abs(a[i] - p);
        int mx = a[i] + p;
        int l = upper_bound(a, a + n, mi) - a;
        int r = lower_bound(a, a + n, mx) - a;
        ans += r - l - (l <= i and i <= r);
    }
    cout << ans / 2 << "\n";
}

 

posted @ 2020-05-27 23:50  Kanoon  阅读(616)  评论(0)    收藏  举报