zoukankan      html  css  js  c++  java
  • A. Increasing by Modulo(二分)

    题目链接:

    https://codeforces.com/problemset/problem/1168/A

    题目大意:

    给你n个数和m,每个数的范围都是在0 ~ (m- 1)。然后每一次操作 你可以选择这n个数中的任意多个,可以将你选择的数(a[i]+1)%m。然后问你最小操作次数使得整个数列变成非递减的。

    具体思路:

    二分枚举操作次数,原则是在保持整个数列非递减的前提下,尽量保持每一个数尽可能小,这样的话这个数列更容易变成非递减的。

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    # define ll long long
    # define inf 0x3f3f3f3f
    const int maxn = 3e5+100;
    int a[maxn];
    int n,m;
    bool check(int x){
    int pre;
    if(a[1]+x>=m)pre=0;
    else pre=a[1];
    for(int i=2;i<=n;i++){
    int tmp=-1;
    if((a[i]+x)>=m&&(a[i]+x)%m>=pre)tmp=pre;
    else if(a[i]<=pre&&a[i]+x>=pre)tmp=pre;
    else if(a[i]>pre)tmp=a[i];
    if(tmp==-1)return false;
    pre=tmp;
    }
    return true;
    }
    int main(){
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++){scanf("%d",&a[i]);}
    int ans=0;
    int l=0,r=m;
    while(l<=r){
    int mid=l+r>>1;
    if(check(mid)){ans=mid;r=mid-1;}
    else l=mid+1;
    }
    printf("%d
    ",ans);
    return 0;
    }
  • 相关阅读:
    左边菜单导航
    css3实现轮播
    js-统计选项个数
    空间评论。回复。点赞功能
    简单的购物车功能
    字符串常用的几种方法
    React,js实现分页的案列
    python2的cgi程序
    开发环境和工具
    github入门
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10939636.html
Copyright © 2011-2022 走看看