zoukankan      html  css  js  c++  java
  • Codeforces Round #562 (Div. 2) C. Increasing by Modulo

    链接:https://codeforces.com/contest/1169/problem/C

    题意:

    Toad Zitz has an array of integers, each integer is between 00 and m1m−1 inclusive. The integers are a1,a2,,ana1,a2,…,an.

    In one operation Zitz can choose an integer kk and kk indices i1,i2,,iki1,i2,…,ik such that 1i1<i2<<ikn1≤i1<i2<…<ik≤n. He should then change aijaij to ((aij+1)modm)((aij+1)modm) for each chosen integer ijij. The integer mm is fixed for all operations and indices.

    Here xmodyxmody denotes the remainder of the division of xx by yy.

    Zitz wants to make his array non-decreasing with the minimum number of such operations. Find this minimum number of operations.

     思路:

    二分,考虑当前步数能否满足条件即可。判断时候,如果ai+1 < ai 则判断能否使ai加到ai+1,如果不行则当前步数不行,如果ai+1 > ai。同样尽量使ai+1 = ai,如果不行并不结束。

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long LL;
    const int MAXN = 3e5 + 10;
    const int MOD = 1e9 + 7;
    int n, m, k, t;
    int a[MAXN];
    
    bool Check(int cnt)
    {
        int temp = 0;
        for (int i = 1;i <= n;i++)
        {
            if (a[i] < temp)
            {
                int ops = temp-a[i];
                if (ops > cnt)
                    return false;
            }
            else if (a[i] > temp)
            {
                int ops = m-a[i]+temp;
                if (ops > cnt)
                    temp = a[i];
            }
        }
        return true;
    }
    
    int main()
    {
        cin >> n >> m;
        for (int i = 1;i <= n;i++)
            cin >> a[i];
        int l = 0, r = m;
        int res = m;
        while (l < r)
        {
            int mid = (l+r)/2;
            if (Check(mid))
            {
                res = min(res, mid);
                r = mid;
            }
            else
                l = mid+1;
        }
        cout << res << endl;
    
        return 0;
    }
    

      

  • 相关阅读:
    nodejs 模板引擎jade的使用
    Underscore.js 入门-常用方法介绍
    Underscore.js 入门
    画菱形或者尖角
    微信小程序 bindcontroltap 绑定 没生效
    js--敏感词屏蔽
    js生成二维码 中间有logo
    移除input在type="number"时的上下箭头
    js获取当前域名、Url、相对路径和参数以及指定参数
    hihocoder 1931 最短管道距离
  • 原文地址:https://www.cnblogs.com/YDDDD/p/10930217.html
Copyright © 2011-2022 走看看