zoukankan      html  css  js  c++  java
  • Codeforces Round #619 (Div. 2) A-D

    比赛链接:Here

    1301A. Three Strings

    题意:

    给三个相同长的字符串 (a,b,c)​ ,对于每个位置 (i)​ ,你必须做一次操作:交换 (a_i)​ 和 (c_i) ,或者交换 (b_i)(c_i)。问你交换完之后 (a)(b) 能否一样。

    因为每个位置必须交换,所以每个位置只要 (a_i = c_i) 或者 (b_i = c_i) 即可

    int main() {
        cin.tie(nullptr)->sync_with_stdio(false);
        int _; for (cin >> _; _--;) {
            string a, b, c;
            cin >> a >> b >> c;
            bool f = 1;
            for (int i = 0; f and i < a.size(); ++i) {
                if (a[i] == c[i] || b[i] == c[i]) continue;
                f = 0;
            }
            cout << (f ? "YES
    " : "NO
    ");
        }
    }
    

    1301B. Motarack's Birthday

    题意:

    给一个长为 (n) 的整数数组,其中有一些数消失了,用 (-1) 代替,其他数大于等于 (0),然后叫你找一个非负数 (k) ,使得用 (k) 替代所有 (-1) 后,相邻元素的差值的最大值,这个值要最小。

    思路:

    差值最大值无非就是,原来就有的数之间的相邻差值最大值,和替换后k与原来就有的数的差值的最大值里求一个 (max)​ 。前者可以直接求的,后者当 (k)​ 取到 ((m_i+mx)/2)​ 时取到最小。(m_i)​ 为与 (k-1)​ 邻的原来有的数的最小值,(mx)​ 为最大值。

    const int N = 1e5 + 10;
    ll a[N];
    int main() {
        cin.tie(nullptr)->sync_with_stdio(false);
        int _; for (cin >> _; _--;) {
            int n; cin >> n;
            for (int i = 0; i < n; ++i) cin >> a[i];
            ll base = 0;
            vector<ll>v;
            for (int i = 0; i < n - 1; ++i) {
                if (a[i] == -1 and a[i + 1] != -1) v.push_back(a[i + 1]);
                else if (a[i] != -1 and a[i + 1] == -1) v.push_back(a[i]);
                else if (a[i] != -1 and a[i] != -1) base = max(base, abs(a[i] - a[i + 1]));
            }
            if (v.empty()) {cout << "0 0
    "; continue;}
            sort(v.begin(), v.end());
            int k = (v.back() + *v.begin()) / 2;
            cout << max(max(v.back() - k, k - v[0]), base) << " " << k << "
    ";
        }
    }
    

    1301C. Ayoub's function

    题意:

    函数 (f(s))​ 代表,(01)​ 字符串 (s)​ 中包含至少一个 (1) 的子串的数量。问你所有长度为 (n) ,其中有 (m)(1)(01) 字符串中。使得 (f(s)) 的值最大为多少。

    做法:

    至少包含一个 (1) 的子串的数量 (=) 所有子串的数量 (-) 只包含(0) 的子串的数量。

    所以要使得 (f(s))​​ 越大,只包含 (0)​​ 的子串的数量要越小越好,于是 (01)​​ 字符串中每一段的连续的 (0)​​ 的个数应尽可能一样。(m)​​ 个 (1)​​ ,有 (n-m)​​ 个 (0)​​ ,被分成 (m+1)​​ 段,长度为 ((n-m)/(m+1)+1)​​ 的连续 (0)​​ 的段数为 ((n-m)%(m+1))​​ ,长度为 ((n-m)/(m+1))​ 的连续 (0)​ 的段数为 (m+1-(n-m)%(m+1)) 。再计算一下可得答案。

    int main() {
        cin.tie(nullptr)->sync_with_stdio(false);
        int _; for (cin >> _; _--;) {
            ll n, m; cin >> n >> m;
            ll ans = n * (n + 1) / 2;
            ll num = (n - m) / (m + 1);
            ll r = (n - m) % (m + 1);
            cout << (ans - r * (num + 1) * (num + 2) / 2 - (m + 1 - r) * num * (num + 1) / 2) << "
    ";
        }
    }
    

    1301D. Time to Run

    题意:

    (n*m) 的网格,相邻网格间有两条道路(不同方向)。问你能否不重复的走 (k) 条路,可以的话输出路径。按题目要求。

    img

    思路:

    真就直接走完咯,先左右走,到最后一行只往右,到右下角之后上下走,ok,然后题目要求 (k) ,边走边减,到 (0)​ 为止即可。 如果全部都走过了 (k) 还有剩就输出 NO.

    int n, m, k;
    vector<pair<int, string>>v, ans;
    int main() {
        cin.tie(nullptr)->sync_with_stdio(false);
        cin >> n >> m >> k;
        for (int i = 0; i < n - 1; ++i) {
            if (m != 1) {
                v.push_back({m - 1, "R"});
                v.push_back({m - 1, "L"});
            }
            v.push_back({1, "D"});
        }
        if (m != 1) v.push_back({m - 1, "R"});
        for (int i = 0; i < m - 1; ++i) {
            if (n != 1) {
                v.push_back({n - 1, "U"});
                v.push_back({n - 1, "D"});
            }
            v.push_back({1, "L"});
        }
        if (n != 1) v.push_back({n - 1, "U"});
        for (int i = 0; i < v.size(); ++i) {
            if (k >= v[i].first) {
                k -= v[i].first;
                ans.push_back(v[i]);
            } else if (k != 0) {
                ans.push_back({k, v[i].second});
                k = 0;
            }
        }
        if (k > 0) cout << "NO
    ";
        else {
            cout << "YES
    ";
            cout << ans.size() << "
    ";
            for (auto p : ans) cout << p.first << " " << p.second << "
    ";
        }
    }
    

    The desire of his soul is the prophecy of his fate
    你灵魂的欲望,是你命运的先知。

  • 相关阅读:
    flume sink两种类型 file_rool 自定义sing com.mycomm.MySink even if there is only one event, the event has to be sent in an array
    为什么引入进程20年后,又引入线程?
    As of Flume 1.4.0, Avro is the default RPC protocol.
    Google Protocol Buffer 的使用和原理
    Log4j 2
    统一日志 统一订单
    网站行为跟踪 Website Activity Tracking Log Aggregation 日志聚合 In comparison to log-centric systems like Scribe or Flume
    Percolator
    友盟吴磊:移动大数据平台的架构、实践与数据增值
    Twitter的RPC框架Finagle简介
  • 原文地址:https://www.cnblogs.com/RioTian/p/15182482.html
Copyright © 2011-2022 走看看