zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 92 (Rated for Div. 2) A~C

    原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处。

    最近写学习了一下网络爬虫,但昨天晚上的CF让人感觉实力明显退步,又滚回来刷题了QAQ...

    比赛链接:Here

    1389A. LCM Problem

    给定区间 ([l,r]),求两个不同的数字 (x,y) ,使得(l≤x<y≤r,l≤LCM(x,y)≤r)

    思路

    这道题和之前的一道求区间最大 (gcd)​​ 的签到很像,感兴趣的可以去看看 CF1370A. Maximum GCD

    在这个题目中的条件可以整合为 (lle x < y le lcmle r),所以我们只需要让 (lcm) 最小即可 。

    (x)(y) 的最小公倍数最小为 (lcm_{min}(x,y) = y = 2x) ,此时令 (x=l) ,可以得到 (lcm_{min}=y=2l) ,即为最小的答案。如果 (2l>r), 无解。

    int main() {
        ios::sync_with_stdio(false), cin.tie(nullptr);
        int _; for (cin >> _; _--;) {
            ll l, r; cin >> l >> r;
            if (2 * l > r) cout << "-1 -1
    ";
            else cout << l << " " << 2 * l << "
    ";
        }
    }
    

    1389B. Array Walk

    给定数组 (a_1,a_2,a_3,...,a_n),起点为 (a_1) ,你可以向左向右移动,不能越界,最多 (k) 次。

    并且限制不能连续的向左移动,且向左移动的次数最多为 (z)

    每次移动到位置 (i) 可以获取分数 (a_i) ,初始分数为 (a_1) ,询问你可以得到的最大分数和。

    思路:

    最开始在写的时候挺懵逼的,但考虑差分之后感觉可以就往下推了,正好这个思路是正解?

    首先,向左移动不能连续,所以如果有向左移动,就只能以左右间隔的形式反复横跳。其次,以贪心的思想,最大和出现的情况,一定是只在某两个相邻位置之间反复横跳。

    我们将移动分为三个阶段:

    • 第一阶段,假设初始向右移动了 (i) 步,那么当前处于的位置为 (a_{i+1}) ,积分和为 (s1= sum_{i+1}) (设 (sum_i = sum_{k=1}^ia_k),即前 (i) 项和)
    • 第二阶段,随后在 (a_i)​ 与 (a_{i +1})​之间反复横跳,设此过程中向左次数最多为 (p)​ 次,向右次数最多为 (q)​​ ,则 (p=min left(z,leftlceilfrac{k-i}{2} ight ceil ight), q=min (p, k-i-p),) 得到的积分为 (s_{2}=p * a_{i}+q * a_{i+1})​​
    • 第三阶段,设剩余的步数为 (k_1 = k - i - p - q)
      • 如果 (k_1 > 0) ,全部用于向右移动,可以得到的积分为 $s_{3}=s u m_{k_{1}+i+1}-s u m_{i+1} $ (如果有剩余步,那 么第二阶段结束后位置一定在 (i+1)​) 。
      • 如果 $k_{1}=0 $, 则 $s_{3}=0 $, 且同时 $ i+1=k-p-q+1$ ,即 $s u m_{i+1}=s u m_{k-p-q+1} $, 无论阶段二的落点是在 (i) 还是 $i+1 $ 。

    三个阶段的总积分获取为:(r e s=s_{1}+s_{2}+s_{3}=s u m_{k-p-q+1}+p * a_{i}+q * a_{i+1})

    则最大积分和 ({ ans }=max left{mathrm{res}_{i} mid r e s_{i}=operatorname{sum}_{k-p-q+1}+p * a_{i}+q * a_{i+1}, i in[1, k] ight})​ ,

    复杂度为:(mathcal{O}(k))

    const int N = 1e5 + 10;
    ll a[N], s[N];
    int main() {
        ios::sync_with_stdio(false), cin.tie(nullptr);
        int _; for (cin >> _; _--;) {
            ll n, k, z;
            cin >> n >> k >> z;
            for (int i = 1; i <= n; ++i) cin >> a[i];
            ll ans = 0;
            s[0] = 0;
            for (int i = 1; i <= n; ++i) s[i] = s[i - 1] + a[i];
            for (int i = 1; i < k + 1; i += 1) {
                ll p = min(1ll * z, (k + 1 - i) / 2);
                ll q = min(1ll * p, k - i - p);
                ll res = s[k - p - q + 1] + p * a[i] + q * a[i + 1];
                ans = max(ans, res);
            }
            cout << ans << "
    ";
        }
    }
    

    1389C. Good String

    规定字符串 (t_1,t_2,t_3,...,t_n)

    如果 (t_n,t_1,t_2,...t_{n−3},t_{n−2},t_{n−1},t_n)​与 (t_2,t_3,t_4,...t_{n−1},t_n)​ 完全相同,则称该字符串为 Good String

    判断给定字符串至少删除多少个字符可以变成 Good String 。

    思路:

    简单推导可以得到 Good String 中:

    • 如果 (n) 是偶数,(t_1 = t_3 = t_5 =...=t_{n-3} = t_{n-1})(t_2 = t_4 =...=t_{n-2} = t_n)

      (25252525)

    • 如果 (n) 为奇数,(t_1 = t_2 = ...=t_n) ,如 (2222)

    而且题目规定 (t_i in [0,9]) ,我们通过可以构造 (10 imes 10) 种情况,分别算转化需要的最小花费。

    复杂度为:(mathcal{O}(10^2n))

    int main() {
        ios::sync_with_stdio(false), cin.tie(nullptr);
        int _; for (cin >> _; _--;) {
            string s; cin >> s;
            int a[2] = {};
            int ans = INT_MAX;
            for (int i = 0; i < 10; ++i)
                for (int j = 0; j < 10; ++j) {
                    a[0] = i, a[1] = j;
                    int ct = 0, k = 0;
                    for (int i = 0; i < s.size(); ++i) {
                        if (s[i] != a[k & 1] + '0') ct++;
                        else k = !k;
                    }
                    if (int(s.size() - ct) & 1) if (i != j) ct++; //只有全相等才能为奇数
                    ans = min(ans, ct);
                }
            cout << ans << "
    ";
        }
    }
    

    1389D. Segment Intersections

    待补

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

  • 相关阅读:
    14.从m个球中取出n个球的所有组合情况
    13.输入一个数,求1! + 3!
    centos LVM详解
    git的团队协作开发
    centos-yum离线源
    检测 HTML5CSS3JAVASCRIPT 在浏览器的适应情况
    J2EE 中 The function valueOf must be used with a prefix when a default namespace is not specified 错误
    HTML
    App签名--- Android
    ToggleButton --------- 按钮实现开关效果
  • 原文地址:https://www.cnblogs.com/RioTian/p/15234696.html
Copyright © 2011-2022 走看看