• 2019 HDOJ Multi-University Training Contest Stage 8(杭电多校)


    中规中矩的一场。

    题目链接:http://acm.hdu.edu.cn/contests/contest_show.php?cid=855


    C:

    定义函数f(d,k)为数字d在数字k中出现的次数。给定d和x,找到尽量大的k使得k<=x且f(d,k)==k。

    很诡异的一题,最好的做法仍然是打表找规律。题解给了一个很神奇的结论:满足条件的k<1011且k的分布非常稀疏。

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define dou double
     6 #define pb emplace_back
     7 #define mp make_pair
     8 #define sot(a,b) sort(a+1,a+1+b)
     9 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    10 #define rep0(i,a,b) for(int i=a;i<b;++i)
    11 #define eps 1e-8
    12 #define int_inf 0x3f3f3f3f
    13 #define ll_inf 0x7f7f7f7f7f7f7f7f
    14 #define lson (curpos<<1)
    15 #define rson (curpos<<1|1)
    16 /* namespace */
    17 using namespace std;
    18 /* header end */
    19 
    20 const ll m = 1e5, maxn = 1e6 + 10;
    21 ll a[maxn][10], ans[10][maxn], cnt[10];
    22 
    23 bool check(ll x, ll y) {
    24     if (x < 0 && y >= 0) return 1;
    25     if (x > y && x >= 0 && x < m) return 1;
    26     return 0;
    27 }
    28 
    29 int main() {
    30     for (int i = 1; i < m * 10; i++) {
    31         for (int j = 0; j < 10; j++) a[i][j] = a[i / 10][j];
    32         a[i][i % 10]++;
    33     }
    34     for (int d = 1; d < 10; d++) {
    35         int r = 1;
    36         for (int i = 0; i < m * d; i++)
    37             if (check(r, r - m / 2 + m * a[i][d])) {
    38                 for (int j = 0; j < m; j++) {
    39                     r += a[i][d] + a[j][d] - 1;
    40                     if (!r) ans[d][cnt[d]++] = m * i + j;
    41                 }
    42             } else r += m * a[i][d] - m / 2;
    43     }
    44     int query; scanf("%d", &query);
    45     while (query--) {
    46         int d; ll k; scanf("%d%lld", &d, &k);
    47         int r = cnt[d] - 1;
    48         while (r >= 0 && ans[d][r] > k) r--;
    49         if (r >= 0) printf("%lld
    ", ans[d][r]);
    50         else puts("0");
    51     }
    52     return 0;
    53 }
    View Code

    I:

    给定两个矩形的左上角和右下角坐标,问这两个矩形把平面分成几个区域。

    离散化是重点。

    /* Codeforces Contest 2019_mutc_08
     * Problem I
     * Au: SJoshua
     */
    #include <set>
    #include <unordered_map>
    #include <queue>
    #include <cstdio>
    #include <vector>
    #include <string>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    bool board[20][20];
    
    const int movement[4][2] = {
        {0, -1}, {0, 1}, {1, 0}, {-1, 0}
    };
    
    struct node {
        int x, y;
    };
    
    struct Rectangle {
        int x1, y1, x2, y2;
        void fill(void) {
            for (int x = x1; x <= x2; x++) {
                board[x][y1] = board[x][y2] = true;
            }
            for (int y = y1; y <= y2; y++) {
                board[x1][y] = board[x2][y] = true;
            }
        }
    };
    
    void init(void) {
        memset(board, 0, sizeof(board));
    }
    
    int calc(void) {
        int ans = 0;
        for (int i = 0; i < 20; i++) {
            for (int j = 0; j < 20; j++) {
                if (!board[i][j]) {
                    queue <node> info;
                    info.push({i, j});
                    while (!info.empty()) {
                        auto t = info.front();
                        info.pop();
                        if (board[t.x][t.y]) {
                            continue;
                        }
                        board[t.x][t.y] = true;
                        for (int k = 0; k < 4; k++) {
                            int nx = t.x + movement[k][0], ny = t.y + movement[k][1];
                            if (0 <= nx && nx < 20 && 0 <= ny && ny < 20 && !board[nx][ny]) {
                                info.push({nx, ny});
                            }
                        }
                    }
                    ans++;
                }
            }
        }
        return ans;
    }
    
    int main(void) {
        std::ios::sync_with_stdio(false);
        std::cin.tie(0);
        int T;
        cin >> T;
        while (T--) {
            vector <int> vec(8);
            set <int> hash;
            unordered_map <int, int> mp;
            for (int i = 0; i < 8; i++) {
                cin >> vec[i];
                hash.insert(vec[i]);
            }
            int cur = 1;
            for (auto e : hash) {
                mp[e] = cur;
                cur += 2;
            }
            Rectangle A = {mp[vec[0]], mp[vec[1]], mp[vec[2]], mp[vec[3]]};
            Rectangle B = {mp[vec[4]], mp[vec[5]], mp[vec[6]], mp[vec[7]]};
            init();
            A.fill();
            B.fill();
            cout << calc() << endl;
        }
        return 0;
    }
    Code via. Sjoshua

    J:

    签到题,水题。

     1 /* Codeforces Contest 2019_mutc_08
     2  * Problem J
     3  * Au: SJoshua
     4  */
     5 #include <cstdio>
     6 #include <vector>
     7 #include <string>
     8 #include <iostream>
     9 #include <algorithm>
    10 
    11 using namespace std;
    12 
    13 struct info {
    14     string name;
    15     int score, penalty;
    16 };
    17 
    18 int main(void) {
    19     std::ios::sync_with_stdio(false);
    20     std::cin.tie(0);
    21     int T;
    22     cin >> T;
    23     while (T--) {
    24         int n, d;
    25         cin >> n >> d;
    26         vector <info> board(n);
    27         for (int i = 0; i < n; i++) {
    28             cin >> board[i].name >> board[i].score >> board[i].penalty;
    29         }
    30         sort(board.begin(), board.end(), [](info & a, info & b)->bool {
    31             return a.score == b.score ? a.penalty < b.penalty : a.score > b.score;
    32         });
    33         d *= 10;
    34         if ((n * d) % 100 == 50) {
    35             cout << board[(n * d) / 100].name << endl;
    36         } else {
    37             cout << "Quailty is very great" << endl;
    38         }
    39     }
    40     return 0;
    41 }
    Code via. Sjoshua

    K:

    有n个班级,一个班有ai个人并准备了bi杯奶茶。每个人只能喝一杯奶茶,而且不能喝本班的奶茶。问最多有多少人能喝奶茶。

    按班级人数从大到小排序,然后对于第i个班,从第i+1个班开始绕一圈喝奶茶即可。

     1 /* Codeforces Contest 2019_mutc_08
     2  * Problem K
     3  * Au: SJoshua
     4  */
     5 #include <queue>
     6 #include <cstdio>
     7 #include <vector>
     8 #include <string>
     9 #include <list>
    10 #include <iostream>
    11 #include <algorithm>
    12 
    13 using namespace std;
    14 
    15 struct _Class {
    16     int num, tea;
    17 };
    18 
    19 int main(void) {
    20     std::ios::sync_with_stdio(false);
    21     std::cin.tie(0);
    22     int T; cin >> T;
    23     while (T--) {
    24         int n; cin >> n;
    25         vector <_Class> _class(n);
    26         for (int i = 0; i < n; i++) {
    27             cin >> _class[i].num >> _class[i].tea;
    28         }
    29         sort(_class.begin(), _class.end(), [](_Class & a, _Class & b) {
    30             return a.tea == b.tea ? a.num > b.num : a.tea > b.tea;
    31         });
    32         long long int ans = 0;
    33         vector <int> nxt(n);
    34         for (int i = 0; i < n - 1; i++) nxt[i] = i + 1;
    35         nxt[n - 1] = 0;
    36         for (int i = 0; i < n; i++) {
    37             int nxt = i;
    38             long long int cnt = 0, round = 0;
    39             while (_class[i].num) {
    40                 round++;
    41                 int last = nxt; nxt = nxt[nxt];
    42                 if (nxt == i) break;
    43                 if (_class[nxt].tea) {
    44                     int drink = min(_class[nxt].tea, _class[i].num);
    45                     _class[i].num -= drink, _class[nxt].tea -= drink;
    46                     ans += drink, cnt += drink;
    47                 } else nxt[last] = nxt[nxt];
    48                 if (round > n) break;
    49             }
    50             if (!cnt && _class[i].num) break;
    51         }
    52         cout << ans << endl;
    53     }
    54     return 0;
    55 }
    Code via. Sjoshua
  • 相关阅读:
    Python网络爬虫四大选择器(正则表达式、BS4、Xpath、CSS)总结
    如何利用CSS选择器抓取京东网商品信息
    如何利用Xpath抓取京东网商品信息
    如何利用BeautifulSoup选择器抓取京东网商品信息
    利用Python正则表达式抓取京东网商品信息
    jacoco查看覆盖率
    Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台(不使用docker)
    记录工作中遇到的BUG,经典的数据库时区问题和字段类型tinyint(1)问题
    jmeter分布式压测
    Linux性能优化思路
  • 原文地址:https://www.cnblogs.com/JHSeng/p/11354513.html
Copyright © 2020-2023  润新知