Codeforces 1168A Increasing by Modulo
题目链接:http://codeforces.com/problemset/problem/1168/A
题意:给一个数组,数组中元素范围为0~n,每次你可以选择若干元素进行(ai+1)%m的操作,问使数组呈非递增的最小操作次数。
思路:因为每次都可以选若干个元素,用贪心思想,假设要操作x次,第一个元素加上x若能超过m,则对m取模最小值为0,令其等于0就好了,后面每个元素加上x后,对m取模后只要不比前面小就好了,则依次判断数组的每个元素能否满足,利用二分搜索来寻找 操作数 x,x即为答案。
AC代码:
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = 3e5 + ;
int a[maxn];
int n,m; bool check(int x)
{
int last = a[];
if(a[] + x >= m) last = ;//如果 a[0] 经过x次变换后大于 m 那么 a[0] 可以看做 0 。
for(int i = ;i < n;i++)
{
int temp = -;//存放a[i]与last更大的那个。
if(a[i] >= last)
{
temp = a[i];
//如果经过x次变换后 a[i] 可以比前面大,那么temp存放前面的值就行。
if(a[i] + x >= m && (a[i] + x) % m >= last)
{
temp = last;
}
}
else if(a[i] + x >= last) temp = last;
if(temp == -) return false;//找不到比前面更大的a[i]。
last = temp;
}
return true;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i = ;i < n;i++)
{
scanf("%d",&a[i]);
}
int l = ,r = m + ,ans = ;
while(l <= r)
{
int mid = (l + r) >> ;
if(check(mid)) r = mid - ,ans = mid;
else l = mid + ;
}
printf("%d\n",ans);
return ;
}
Codeforces 1168A Increasing by Modulo的更多相关文章
- Codeforces Round #562 (Div. 2) C. Increasing by Modulo
链接:https://codeforces.com/contest/1169/problem/C 题意: Toad Zitz has an array of integers, each intege ...
- Codeforces.1082E.Increasing Frequency(思路)
题目链接 \(Description\) 给定\(n\)个数.你可以选择一段区间将它们都加上或减去任意一个数.求最终序列中最多能有多少个数等于给定的\(C\). \(n\leq5\times10^5\ ...
- C. Increasing by Modulo
给定n个模m的数字 可以选择k个数字进行操作,操作时对该数字进行+1模m 求解最少多少次操作可以使得该数列变成单调不下降序列 实际上就是二分操作数目,其中操作数目肯定不会超过m 然后我们将左右边界变成 ...
- Codeforces 1168A(二分check)
关键是check.要注意到其实有了mid以后每个位置都是独立的,它能从哪走到哪是固定了的,只要从左到右尽量贪心压着最小值即可. #include <cstdio> const int ma ...
- CF1168A Increasing by Modulo
思路: 首先得做个转化,如果某个解法最终分别对a[i](i = 1, 2, ..., n)做了b[i](i = 1, 2, ..., n)次加1再取余的运算,那么可以等价地构造出x次(x = max( ...
- [Done] Codeforces Round #562 (Div. 2) 题解
A - Circle Metro 模拟几百步就可以了. B - Pairs 爆搜一下,时间复杂度大概是 $O(4 * n)$ Code: 56306723 C - Increasing by Modu ...
- RE:ゼロから始める文化課生活
觉得有必要在NOI之前开一篇学习内容记录. 至于为什么要取这个标题呢?也许并没有什么特殊的借口吧. 5.23 在LOJ上搬了三道原题给大家考了考,然后大家都在考试就我一个人在划水. SSerxhs 和 ...
- LightOJ 1085(树状数组+离散化+DP,线段树)
All Possible Increasing Subsequences Time Limit:3000MS Memory Limit:65536KB 64bit IO Format: ...
- Codeforces Codeforces Round #319 (Div. 2) B. Modulo Sum 背包dp
B. Modulo Sum Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/577/problem/ ...
随机推荐
- Sqli labs系列-less-3 。。。
原本想着找个搜索型的注入玩玩,毕竟昨天被实力嘲讽了 = = . 找了好长时间,我才发现,我没有 = = ,网上搜了一个存在搜索型注入的源码,我看了好长时间,楞没看出来从哪里搜索注入了....估计是我太 ...
- tomcat源码分析一之getCanonicalFile和getAbsolutePath的区别
最近在看tomcat源码 1.getPath(): 返回定义时的路径,(就是你写什么路径,他就返回什么路径) 2.getAbsolutePath(): 返回绝对路径,但不会处理“.”和“..”的情况 ...
- robotframework悬浮菜单定位问题
有些菜单是悬浮菜单,鼠标点上去下级元素才会显示.比如在第一个菜单中选择后会触发二级菜单的某事件,触发二级菜单又去点三级菜单.. 最开始就用click element去点击了,可是菜单会缩回去,就有 ...
- Linux文件大小 指令&编程
在工作和日常的编程中时常需要确定文件的大小,一些基本的查看方式在此做一个总结. 一. linux shell环境下 df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. ...
- C++之宏定义实现两个数最值
转自:https://blog.csdn.net/baidu_33725271/article/details/69478782 方法一: 利用三重条件运算符 #include <stdio.h ...
- PAT 1010 Radix(X)
1010 Radix (25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 = ...
- 拾遗:Git 常用操作回顾
温故而知新,可以为师矣. Git 布局 工作区---->暂存区---->本地仓库---->远程仓库 Create Repository git init PATH git add P ...
- html select美化模拟jquery插件select2.js
代码展示:http://www.51xuediannao.com/demo.php 代码说明: select2.js是一个html select美化模拟类jquery插件,但是select2.js又远 ...
- JAVA API 实现hdfs文件操作
java api 实现hdfs 文件操作会出现错误提示: Permission denied: user=hp, access=WRITE, inode="/":hdfs:supe ...
- (数据科学学习手札59)从抓取数据到生成shp文件并展示
一.简介 shp格式的文件是地理信息领域最常见的文件格式之一,很好的结合了矢量数据与对应的标量数据,而在Python中我们可以使用pyshp来完成创建shp文件的过程,本文将从如何从高德地图获取矢量信 ...