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次方的计算结果太大 ...
随机推荐
- centOS 7安装mysql5.6
方法二:官网下载安装mysql-server # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rp ...
- redis的windows版本下载地址及windows的客户端工具
源码:https://github.com/MSOpenTech/redis 安装包:https://github.com/MSOpenTech/redis/releases 客户端工具:https: ...
- HD-ACM算法专攻系列(15)——Quoit Design
问题描述: 源码: 经典问题——最近邻问题,标准解法 #include"iostream" #include"algorithm" #include" ...
- 理解HashMap底层原理,一个简单的HashMap例子
package com.jl.testmap; /** * 自定义一个HashMap * @author JiangLai * */ public class MyHashMap<K,V> ...
- C#测量程序运行时间及cpu使用时间实例方法
private void ShowRunTime() { TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessorTime; Stopwatc ...
- ZBrush中如何使用套索工具绘制遮罩
ZBrush®中创建遮罩的方法有很多,可以手动创建矩形遮罩.圆形遮罩和图案遮罩,然而这些遮罩都是固定的形状.使用Zbrush中的套索遮罩能够实现不规则的图形遮罩,游刃有余的发挥创作. 使用套索工具绘制 ...
- [转] hadoop MapReduce实例解析-非常不错,讲解清晰
来源:http://blog.csdn.net/liuxiaochen123/article/details/8786715?utm_source=tuicool 2013-04-11 10:15 4 ...
- There are multiple modules with names that only differ in casing.
client?4c0e:153 ./src/components/Paginate.vue There are multiple modules with names that only differ ...
- [TJOI2015]线性规划
题目:洛谷P3973.BZOJ3996. 题目大意:给你n,参数b[][]和c[](里面的数均>0),要你求一个数组A[](0/1,1表示选择),已知:1. 若同时选择X和Y,获得B[x][y] ...
- BZOJ 2150 部落战争 (二分图匹配)
题目大意:给你一个n*m的棋盘,有一些坏点不能走,你有很多军队,每支军队可以像象棋里的马一样移动,不过马是1*2移动的,而军队是r*c移动的,军队只能从上往下移动,如果一个点已经被一直军队经过,那么其 ...