51nod 1402 最大值 3级算法题 排序后修改限制点 时间复杂度O(m^2)
代码:

题意,第一个数为0,相邻的数相差0或者1,有一些点有限制,不大于给定值,求这组数中可能的最大的那个数。
这题我们看一个例子:第5个数的限制为2
1 2 3 4 5 6 7 8 9
0 1 2 3 2
第一个数一定是0,那么我们可以看出其中最大的数为3。
第二个例子:第6个数的限制为2
1 2 3 4 5 6 7 8 9
0 1 2 3 3 2
其中最大的数为3。
关于奇数和偶数,我们可以总结出一个规律
假设左边的数的下标为left,右边的数的下标为right,左边的数为value1,右边的数为value2。
我们可以得出其中的最大值mx = (right-left-(value2-value1))/2+value2。
如果还是不清楚,可以画一画图,这是化简得来的。
有了这个公式我们就好办了,每个限制点分类讨论,1.能达到限制值,2.不能达到限制值。
最后要注意的一点是:这题有个坑
可能后面的限制点会约束前面的限制点。
例如:
第3个点限制为2,第4个点限制为0
如果只管前面的点,不顾后面的点的话,
1 2 3 4 5
0 1 2 0
这样会产生矛盾,导致第3个点与第4个点差值大于1。
所以我们需要先把限制条件处理好,
我们把所有限制点,对其他点的约束,处理好之后,再按照最前面的公式,和分类讨论来做就可以AC了。
我处理限制点的方法是:考虑到只有限制值小的点会对限制值大的产生影响,
我对这些数排个序,把每个点对,比它大的点的约束修改好之后,再来算就好了。
可能会考虑到的问题是:一个点A对后面的某个点B约束修改之后,可能不再是顺序的。
这不是问题,因为B是被A修改来的,它不会对左边的数产生影响。
反证法:如果能产生影响的话,说明A没有修改完所有可以改变的点,产生矛盾,所以不会对前面的点产生影响。
代码:
#include <bits\stdc++.h>
using namespace std;
typedef long long ll; //用来排序的数组
struct node{
int index;
int value;
int con; //存在原数组s1中的位置
}s[]; int s1[][]; // 原数组,输入数据 bool cmp(node x,node y){
if(x.value == y.value) return x.index < y.index;
else return x.value < y.value;
} int main() {
int t,n,m;
cin >> t;
while(t--){
cin >> n >> m;
for(int i = ;i < m; i++){
cin >> s1[i][] >> s1[i][];
s[i].index = s1[i][];
s[i].value = s1[i][];
s[i].con = i;
}
sort(s,s+m,cmp);
for(int i = ;i < m; i++){
for(int j = i+;j < m; j++){
if(s[i].value < s[j].value){
if(abs(s[j].index-s[i].index)+s[i].value < s[j].value){
s[j].value = abs(s[j].index-s[i].index)+s[i].value;
s1[s[j].con][] = abs(s[j].index-s[i].index)+s[i].value;
}
}
}
} int k1,k2;
int value = ;int index = ;
int ans = ;
s1[m][] = n,s1[m][] = ;
for(int i = ;i <= m; i++){
k1 = s1[i][];k2 = s1[i][];
int mx = k1-index+value;
if(mx <= k2){
value = mx;
index = k1;
ans = max(ans,mx);
}else{
int l = k1-index+-(k2-value)-;
ans = max(ans,(l+)/+k2);
value = k2;
index = k1;
}
}
cout << ans << endl;
}
return ;
}
// writen by zhangjiuding
51nod 1402 最大值 3级算法题 排序后修改限制点 时间复杂度O(m^2)的更多相关文章
- 51nod图论题解(4级,5级算法题)
51nod图论题解(4级,5级算法题) 1805 小树 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 她发现她的树的点上都有一个标号(从1到n),这些树都在空 ...
- Good Vegetable 4级算法题 分值: [320/3120] 问题: [8/78]
1523 非回文 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个字符串是非回文的,当且仅当,他只由前p个小写字母 ...
- 51nod——1402最大值、2479小b分糖果 (套路)
1402最大值:正向从1到n,如果没有限制,就依次递增1,如果有限制,就取那个限制和递增到这的最小值.这样保证1和每个限制点后面都是符合题意的递增,但是限制点前面这个位置可能会有落差(之前递增多了). ...
- 51nod 1402 最大值(贪心)
原题链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1402 思路:借鉴了这篇博文http://blog.csdn.n ...
- 51nod 1785 数据流中的算法 (方差计算公式)
1785 数据流中的算法 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间.鼠 ...
- 51 Nod 1402 最大值
1402 最大值 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 一个N长的数组s[](注意这里的数组初始下标设为1 ...
- 51nod 1095 Anigram单词【hash/map/排序/字典树】
1095 Anigram单词 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 一个单词a如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b ...
- 51nod 1785 数据流中的算法 | STL的应用
51nod 1785 数据流中的算法 题面 动态求平均数.方差.中位数. 题解 这道题的坑: 平均数在答案中是向下取整输出并在后面添加".00" 方差:平方的平均数减去平均数的平方 ...
- 51nod 矩阵快速幂(模板题)
1113 矩阵快速幂 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计算结果太大 ...
随机推荐
- 写函数,输入n个数字输出最大值和最小值
# ,写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}# 例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置 ...
- [实例]ROS使用OpenCV读取图像并发布图像消息在rviz中显示
思路: (1)使用opencv读取本地图像 (2)调用cv_bridge::CvImage().toImageMsg()将本地图像发送给rviz显示 一.使用opencv读取本地图像并发布图像消息 ( ...
- <video> controlsList
Audio/Video Updates in Chrome 58 <video controls controlsList="nofullscreen nodownload norem ...
- Golden Gate 概述
概述: 是什么?Oracle GoldenGate 提供异构环境间事务数据的实时.低影响的捕获.路由.转换和交付. 非侵入: 不建触发器,不建中间表,无需增量标记或时间戳字段 不在源表上进行数据查询 ...
- AARRR:互联网创业者一定要掌握的指标
创业公司如何做数据分析?网站分析工具里的指标千百种,到底要从哪些数据入手呢?除了流量跟转换率,还有哪些数据跟公司成长有关呢?或许可以从了解AARRR Metrics开始.AARRR Metrics是由 ...
- oc与swift比较
swift试是用语言层面的雕虫小技和oc的机制大道进行pk. 从整体上来说,oc是一个更加优秀的语言.
- dp入门(先摆在这里,之后细细读)
网址转载链接: http://bbs.chinaunix.net/thread-4094539-1-1.html 动态规划:从新手到专家 Hawstein翻译 前言 我们遇到的问题中,有很大一部分可 ...
- 使用layer.tips实现鼠标悬浮时触发事件提示消息实现
代码: <body> <label id="test" onmouseover="show('test')"> 你瞅啥!?过来试试! & ...
- 解决PL/SQL管理工具database下拉为空和登录出现ORA-12154
前言:昨天捣鼓了一下午,终于可以用plsql连接上oracle了... 测试环境:win10 注意问题: (一).环境变量 我发现按网上别人说的那一大推环境配置,很容易出错,我把它们全删了,就留了两个 ...
- Mysql ERROR 1067: Invalid default value for 字段
问题: //今天把一个数据库的sql文件导入到另一个数据库出现以下异常: Mysql ERROR 1067: Invalid default value for 字段 //原因是因为之前导出数据里面有 ...