• 蓝桥杯2020 A组


    A

    数门牌, 找2就完了 624

    int main() {
        IOS; 
        rep (i, 1, 2020) {
            int cur = i;
            while (cur) n += (cur % 10 == 2), cur /= 10;
        }
        cout << n;
        return 0;
    }
    

    B

    暴力__gcd完事, 记得 1/1, 2481215

    int main() {
        IOS; 
        rep (i, 1, 2020) {
            rep (j, i + 1, 2020) n += (__gcd(i, j) == 1);
        }
        cout << (n << 1) + 1;
        return 0;
    }
    

    C

    暴力跑就完了, 一会↗, 一会↙, 走到 x == 1 或者 y== 1拐弯就行, 761

    int main() { //761
        IOS; bool f = 1;
        for (int x = 1, y = 1, k = 1; ; ++k) {
            if (x == 20 && y == 20) { cout << k; break; }
            if (f)
                if (x - 1) --x, ++y;
                else ++y, f = 0;
            else 
                if (y - 1) ++x, --y;
                else ++x, f = 1;  
        }
        return 0;
    }
    

    D

    暴力跑, 状压就行, 80(跑出81, 是算了 0, 题目要求最少亮一根)

    int main() { //80;
        IOS;
        rep (i, 1, (1 << 7) - 1) {
            rep (j, 1, 7) v[j] = 0, f[j] = j;
            rep (j, 0, 6) if (i >> j & 1) v[j + 1] = 1;
    
            rep (j, 1, 6) if (v[j] && v[j + 1]) unit(j, j + 1);
            if (v[1] && v[6]) unit(1, 6);
            if (v[7]) {
                if (v[2]) unit(2, 7);
                if (v[3]) unit(3, 7);
                if (v[5]) unit(5, 7);
                if (v[6]) unit(6, 7);
            }
    
            bool f = 1;
            rep (j, 1, 7) rep (k, j + 1, 7) if (v[j] && v[k] && find(j) != find(k)) f = 0;
            n += f; 
        }
        cout << n;
        return 0;
    }
    

    E

    (这道题不确定)

    线和圆其实是一样的, 单考虑纯线(圆)

    肯定是 第i个线(原) 和前(i - 1)个线(原) 两两(重点,两两)相交

    故 每次多分出 i 个面,

    然后合并 圆和线, 肯定是 包住 线交差为出围出来的区域, 然后和每条直线都相交 一个圆和20条线 多形成 40个区域

    所以答案是 1011

    int main() {
        IOS; ll ans = 1; //最初就是一个面
        rep (i, 1, 20) ans += i;
        cout << ans + 20 * 40;
        return 0;
    }
    

    F

    sb题

    int main() {
        IOS;
        ll sum = 0, mx = -1, mi = 120;
        for (cin >> _; _; --_) cin >> n, sum += n, umin(mi, n), umax(mx, n);
        cout << mx << ' ' << mi << ' ' << setiosflags(ios::fixed) << setprecision(2) << sum * 1.0 / n;
        return 0;
    }
    

    G

    这道题 ABCDDCBA 你可以直接枚举年分, 我是枚举的 ABCD, 最重要的是判断日期是否合法

    int yue[] = {1, 3, 5, 7, 8, 10, 12};
    
    bool check(int yy, int mm, int dd) {
        if (mm > 12) return 0;
        bool f = 0; //判断闰年
        if (yy % 100 && yy % 4 == 0) f = 1;
        else if (yy % 400 == 0) f = 1;
    
        if (mm == 2) return dd <= 28 + f;
        rep (i, 0, 6) if (mm == yue[i]) return dd <= 31;
        return dd <= 30;
    }
    
    int main() {
        IOS; cin >> n; m = 1e9;
        rep (i, 1, 9)
            rep (j, 0, 9)
                rep (p, 0, 9)
                    rep (q, 0, 9) {
                        int mm = q * 10 + p, dd = j * 10 + i;
                        int yy = i * 1000 + j * 100 + p * 10 + q;
                        if (!check(yy, mm, dd)) continue;
                        int cur = yy * 10000 + mm * 100 + dd;
                        if (cur <= n) continue;
                        umin(m, cur);
                    }
        cout << m << '
    '; m = 1e9;
        rep (i, 1, 9)
            rep (j, 0, 9) {
                int mm = j * 10 + i, dd = mm;
                int yy = i * 1010 + j * 101;
                if (!check(yy, mm, dd)) continue;
                int cur = yy * 10000 + mm * 100 + dd;
                if (cur <= n) continue;
                umin(m, cur);
            }
        cout << m;
        return 0;
    }
    

    H

    和南京2018icpc的 j 很像

    用 map<char, ll> st 存上一次 char 出现的位置

    map<char, ll> ls 存上上一次 ls 出现的位置

    默认所有 char 第一次出现在 i == 0(字符串下标从1开始)

    然后 O(n) 扫就好了, 总的复杂度用了 map 乘个 log

    sb蓝桥不让用unordered, 不然就是个常数

    unordered_map<char, ll> st, ls;
    char s[N];
    
    int main() {
        IOS; cin >> s + 1;
        int len = strlen(s + 1);
        ll ans = 0;
        for (int i = 1; s[i]; ++i) {
            int qq = st[s[i]];
            if (qq) ans -= (qq - ls[s[i]]) * (len - i + 1);
            ans += (i - qq) * (len - i + 1);
            ls[s[i]] = qq; st[s[i]] = i;
        }
        cout << ans;
        return 0;
    }
    

    I

    爬爬爬爬, 计算机和, 还是椭圆, 推公式都要半天, 直接放弃, 平面几何不带板子直接过

    J

    (博客写着写着发现写错了.........., 只能处理长度<27的, 先放着吧)

  • 相关阅读:
    leetcode-----75. 颜色分类
    《面向机器智能的TensorFlow实践》_段菲学习资料
    事务及其ACID特性
    greenplum基本使用操作
    通过java api统计hive库下的所有表的文件个数、文件大小
    深度学习原理与TensorFlow实践_喻俨资料整理
    采集数据到HDFS
    《深入理解TensorFlow架构设计与实现原理》_彭靖田学习材料整理
    Too many open files
    子元素高度100%
  • 原文地址:https://www.cnblogs.com/2aptx4869/p/13831943.html
Copyright © 2020-2023  润新知