• 2020第十一届蓝桥杯第二场省赛C++A组【A-H】


    A. 门牌制作

    答案

    624

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int cnt = 0;
        for (int i = 1; i <= 2020; i++) {
            int x = i;
            while (x) {
                if (x % 10 == 2) ++cnt;
                x /= 10;
            }
        }
        cout << cnt << "
    ";
        return 0;
    }
    

    B. 既约分数

    答案

    2481215

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int cnt = 0;
        for (int i = 1; i <= 2020; i++) {
            for (int j = 1; j <= 2020; j++) {
                if (__gcd(i, j) == 1) 
                    ++cnt;
            }
        }
        cout << cnt << "
    ";
        return 0;
    }
    

    C. 蛇形填数

    答案

    761

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int x = 1, y = 1;
        int a[100][100] = {};
        int num = 1;
        for (int i = 1; x <= 50; i++) {
            for (int j = 0; j < i; j++) {
                a[x][y] = num++;
                if (j != i - 1) {
                    if (i & 1) --x, ++y;
                    else ++x, --y;
                }
            }
            if (i & 1) ++y;
            else ++x;
        }
        cout << a[20][20] << "
    ";
        return 0;
    }
    

    D. 七段码

    答案

    80

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    bool light[7];
    vector<vector<int> > G(7);
    int ans;
    
    bool judge(vector<int> &v1) {
        vector<int> v2;
        queue<int> que;
        bool vis[7] = {};
        que.push(v1[0]);
        vis[v1[0]] = true;
        while (!que.empty()) {
            int u = que.front();
            que.pop();
            v2.push_back(u);
            for (int i = 0; i < G[u].size(); i++) {
                int v = G[u][i];
                if (find(v1.begin(), v1.end(), v) != v1.end() && !vis[v]) {
                    que.push(v);
                    vis[v] = true;
                }
            }
        }
        sort(v1.begin(), v1.end());
        sort(v2.begin(), v2.end());
        return v2 == v1;
    }
    
    void dfs(int dep) {
        if (dep == 7) {
            vector<int> v;
            for (int i = 0; i < 7; i++) if (light[i]) v.push_back(i);
            if (v.size() && judge(v)) ++ans;    
            return;
        }
        light[dep] = true;
        dfs(dep + 1);
        light[dep] = false;
        dfs(dep + 1);
    }
    
    void build_graph() {
        G[0].push_back(1), G[0].push_back(5);
        G[1].push_back(0), G[1].push_back(2), G[1].push_back(6);
        G[2].push_back(1), G[2].push_back(3), G[2].push_back(6);
        G[3].push_back(2), G[3].push_back(4);
        G[4].push_back(3), G[4].push_back(5), G[4].push_back(6);
        G[5].push_back(0), G[5].push_back(4), G[5].push_back(6);
        G[6].push_back(1), G[6].push_back(2), G[6].push_back(4), G[6].push_back(5);
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        build_graph();
        dfs(0);
        cout << ans << "
    ";
        return 0;
    }
    

    E. 平面分割

    答案

    1391

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int line[25] = {};
        line[1] = 2;
        for (int i = 2; i <= 20; i++) {
            line[i] = line[i - 1] + i;
        }
        int ans = line[20];
        for (int i = 1; i <= 20; i++) {
            ans += 40 + 2 * (i - 1);
        }
        cout << ans << "
    ";
        return 0;
    }
    

    F. 成绩分析

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n;
        scanf("%d", &n);
        int mx = -1, mi = 101, sum = 0;
        for (int i = 0; i < n; i++) {
            int x;
            scanf("%d", &x);
            mx = max(mx, x);
            mi = min(mi, x);
            sum += x;
        }
        printf("%d
    ", mx);
        printf("%d
    ", mi);
        printf("%.2f
    ", 1.0 * sum / n);
        return 0;
    }
    

    G. 回文日期

    代码

    #include <bits/stdc++.h>
    using namespace std;
    const int month[2][13] = {
        { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
        { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
    };
    string my_to_string(int n) {
        string s;
        do {
            s += '0' + n % 10;
            n /= 10;
        } while (n);
        reverse(s.begin(), s.end());
        return s;
    }
    int my_stoi(const string &s) {
        int res = 0;
        for (int i = 0; i < int(s.size()); i++) {
            res = res * 10 + s[i] - '0';
        }
        return res;
    }
    bool is(int year) {
        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    }
    bool legal(const string &s) {
        int y = my_stoi(s.substr(0, 4));
        int m = my_stoi(s.substr(4, 2));
        int d = my_stoi(s.substr(6, 2));
        if (m < 1 || m > 12) return false;
        if (d < 1 || d > month[is(y)][m]) return false;
        return true;
    }
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        vector<int> v1, v2;
        for (int i = 1000; i <= 9999; i++) {
            string s1(my_to_string(i));
            string s2(s1.rbegin(), s1.rend());
            string s = s1 + s2;
            string t(s.rbegin(), s.rend());
            if (legal(s)) {
                if (s == t) {
                    v1.push_back(my_stoi(s));
                }
                if ((s[0] == s[2] && s[2] == s[5] && s[5] == s[7]) && 
                    (s[1] == s[3] && s[3] == s[4] && s[4] == s[6]) && 
                    (s[0] != s[1])) {
                    v2.push_back(my_stoi(s));
                }
            }
        }
        int n;
        cin >> n;
        cout << *upper_bound(v1.begin(), v1.end(), n) << "
    ";
        cout << *upper_bound(v2.begin(), v2.end(), n) << "
    ";
        return 0;
    }
    

    H. 子串分值

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        string s;
        cin >> s;
        int n = s.size();
        vector<vector<int> > pos(26);
        for (int i = 0; i < 26; i++) {
            pos[i].push_back(-1);
        }
        for (int i = 0; i < n; i++) {
            pos[s[i] - 'a'].push_back(i);
        }
        for (int i = 0; i < 26; i++) {
            pos[i].push_back(n);
        }
        long long ans = 0;
        for (int i = 0; i < 26; i++) {
            for (int j = 1; j + 1 < int(pos[i].size()); j++) {
                int l = pos[i][j] - pos[i][j - 1] - 1;
                int r = pos[i][j + 1] - pos[i][j] - 1;
                ans += 1LL * (l + 1) * (r + 1);
            }
        }
        cout << ans << "
    ";
        return 0;
    }
    
  • 相关阅读:
    组合数学+结论——cf1359E
    【模拟】分类讨论大模拟+数论——cf1358F
    【思维】前缀和——cf1358E
    Android基础—— 自定义RecyclerView内部控件的监听器
    【思维】模拟+暴力——icpc nwrrc 2019 K
    分治模板
    树上问题&图论模板整理
    数据结构模板整理
    一些计数题
    Codeforces Round #567 (Div. 2)
  • 原文地址:https://www.cnblogs.com/Kanoon/p/13832489.html
Copyright © 2020-2023  润新知