zoukankan      html  css  js  c++  java
  • Codeforces Round #482 (Div. 2)

    A. Pizza, Pizza, Pizza!!!

    注意:long long

    B. Treasure Hunt

    注意:第五个样例(aaaaa,n==1)的情况要先处理一下。

    感受:还是读题的问题,and the ribbon abcdabc has the beauty of 2 because its subribbon abc appears twice.(误导信息一),题目没要求是最大的连续子串。还有就是只能修改一个位置,记得给的单词是segment(一段同颜色的),后来题面好像改了。

    #pragma warning(disable:4996)
    #include<cmath>
    #include<string>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define mem(arr,in) memset(arr,in,sizeof(arr))
    using namespace std;
    
    const int maxn = 100005;
    
    int n;
    
    void change(string s, string& ss) {
        ss += s[0];
        for (int i = 1; i < s.size(); i++) {
            if (s[i] == s[i - 1]) continue;
            else ss += s[i];
        }
    }
    
    int getmax(string s) {
        int p[30], q[30];
        mem(p, 0);
        mem(q, 0);
    
        for (int i = 0; i < s.size(); i++) {
            if (s[i] >= 'a' && s[i] <= 'z') p[s[i] - 'a']++;
            else q[s[i] - 'A']++;
        }
    
        int res = 0;
        for (int i = 0; i < 26; i++) {
            res = max(res, p[i]);
            res = max(res, q[i]);
        }
        return res;
    }
    
    int main()
    {
        while (cin >> n) {
            string a, b, c;
            cin >> a >> b >> c;
    
            int p[3];
            p[0] = a.size() - getmax(a);
            p[1] = b.size() - getmax(b);
            p[2] = c.size() - getmax(c);
    
            int x, y, z;
            int m = a.size();
         //n==1的情况有点特殊
            if (p[0] == 0) {
                if (n == 1) x = a.size() - 1;
                else x = a.size();
            }
            else x = min(m, getmax(a) + n);
    
            if (p[1] == 0) {
                if (n == 1) y = b.size() - 1;
                else y = b.size();
            }
            else y = min(m, getmax(b) + n);
    
            if (p[2] == 0) {
                if (n == 1) z = c.size() - 1;
                else z = c.size();
            }
            else z = min(m, getmax(c) + n);
        
            int cnt = 0, d = max(x, max(y, z));
            if (x == d) cnt++;
            if (y == d) cnt++;
            if (z == d) cnt++;
    
            if (cnt > 1) {
                cout << "Draw" << endl;
            }
            else {
                if (x==d) {
                    cout << "Kuro" << endl;
                }
                else if (y==d) {
                    cout << "Shiro" << endl;
                }
                else cout << "Katie" << endl;
            }
    
            /*  //修改连续同颜色的一段!!!
            string sa, sb, sc;
            change(a, sa);
            change(b, sb);
            change(c, sc);
    
            int p[3];
            p[0] = sa.size() - getmax(sa);
            p[1] = sb.size() - getmax(sb);
            p[2] = sc.size() - getmax(sc);
    
            int cnt = 0, res = maxn;
            for (int i = 0; i < 3; i++) {
                if (n >= p[i]) cnt++;
                res = min(res, p[i]);
            }
    
            if (cnt > 1) {
                cout << "Draw" << endl;
            }
            else {
                if (res == p[0]) {
                    cout << "Kuro" << endl;
                }
                else if (res == p[1]) {
                    cout << "Shiro" << endl;
                }
                else cout << "Katie" << endl;
            }
            */
        }
        return 0;
    }

    C. Kuro and Walking Route

    题解:计数问题,两次DFS即可。

    注意:可能爆int。

    #pragma warning(disable:4996)
    #include<map>
    #include<vector>
    #include<cmath>
    #include<string>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define ll long long
    using namespace std;
    
    const int maxn = 300005;
    
    vector<int> G[maxn];
    
    int n, x, y;
    int dp[maxn];
    bool use[maxn];
    
    void DFS(int u) {
        use[u] = 1;
        dp[u] = 1;
        for (int i = 0; i < G[u].size(); i++) {
            int v = G[u][i];
            if (!use[v]) {
                DFS(v);
                dp[u] += dp[v];
            }
        }
    }
    
    int main()
    {
        while (scanf("%d%d%d", &n, &x, &y) != EOF) {
            
            for (int i = 1; i <= n; i++) G[i].clear();
            for (int i = 2; i <= n; i++) {
                int u, v;
                scanf("%d%d", &u, &v);
                G[u].push_back(v);
                G[v].push_back(u);
            }
    
            memset(use, 0, sizeof(use));
            memset(dp, 0, sizeof(dp));
    
            DFS(x);
            int ans1 = dp[y];
    
            memset(use, 0, sizeof(use));
            memset(dp, 0, sizeof(dp));
    
            DFS(y);
            int ans2 = dp[x];
        
            ll p = (ll)n * (ll)(n - 1);
            ll q = (ll)ans2 *(ll) ans1;
        
            cout << p - q << endl;
        }
        return 0;
    }
  • 相关阅读:
    Scrapy爬虫的基本使用
    scrapy 常见问题
    yield 关键字的使用
    Scrapy 爬虫框架
    股票数据爬虫
    为什么CNN需要固定输入图像的尺寸
    实战 7 淘宝商品信息定向爬虫
    正则表达式
    w​x​F​o​r​m​B​u​i​l​d​e​r​初​体​验
    wxwidget wxpython 可视化开发工具
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/9040371.html
Copyright © 2011-2022 走看看