= =本来昨天就该发的,只是断网……。

MATH
 
【题目描述】
小 x正在做他的数学作业,可是作业实在太难了。题目是这样的:
1.给定一个含有N个数的数列 V。
2.你可以从数列中恰好移除 K个数,定义移除后的数列为 V’。
3.定义M为V’中任意两个数的差的最大值,m为 V’中任意两个数的差的最小值。
4.请你选择删去的K 个数,使得M+m最小。
小 x的数学十分之差,于是他只能向你求助了。
 
【输入】
第一行两个整数 N和K。
第二行N个整数Vi。
 
【输出】
一行一个整数,为最小的M+m的和。
 
【样例输入】
5 2
-3 -2 3 8 6
 
【样例输出】
7
 
【样例解释】
删去-3 和-2,得到 V’={3,6,8},M=5,m=2,M+m=7。
 
【数据范围】
对于60%的数据:3 ≤ N ≤ 2 000
对于100%的数据:
3 ≤ N ≤ 200 000
1 ≤ K ≤ N - 2
-5 000 000 ≤Vi ≤ 5 000 000

对于这道题,乍一看很绕……实际也很绕,但是做法很简单。

首先,我们对原序列排序,排了序之后,枚举长度为(n-k)的区间求最大差和最小差的差(= =),然后打擂求出最小即可。

因为我们可以证明,删去元素后得到的最优序列排了序之后一定是连续的,所以只需要枚举就可以了。(证明略)

但是最后求区间最小差的时候要用倍增ST算法,不然会超时……

代码如下(风格丑别在意)

 #include <algorithm>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
using namespace std;
ifstream fin("math.in");
ofstream fout("math.out");
long long int Beiz[][][]={};//アカヤ・
long long int xl[]={};//ミミ
long long int ca[]={};//iコヘi+1オトイ・
int C2[]={,,,,,,,,,,,,,,,,,,,};
long long int num=,cut=;
bool px(long long int a,long long int b);
void beiz(int cs);
long long int findi(long long int begin,long long int end);
int main(void)
{
fin>>num>>cut;
for(int i=;i<=num;i++)fin>>xl[i];
sort(xl+,xl+num+,px);
for(int i=;i<=num;i++)
{
ca[i]=abs(xl[i+]-xl[i]);
Beiz[i][][]=ca[i];
Beiz[i][][]=i+;
}
beiz();
long long int rest=num-cut-;
long long int ans=0x7fffffffffffffffll,tot=;
for(int i=;i<=cut+;i++)
{
if(i+rest>num)break;
tot=abs(xl[i+rest]-xl[i])+findi(i,i+rest-);
ans=min(tot,ans);
}
fout<<ans;
return ;
} bool px(long long int a,long long int b)
{
if(a<b)return ;
return ;
} void beiz(int cs)
{
if(cs==)return;
for(int i=;i<=num;i++)
{
Beiz[i][cs][]=Beiz[Beiz[i][cs-][]][cs-][];
Beiz[i][cs][]=min(Beiz[Beiz[i][cs-][]][cs-][],Beiz[i][cs-][]);
}
beiz(cs+);
} long long int findi(long long int begin,long long int end)
{
long long int L1=,L2=,Mid=;
double K=log((double)(end-begin))/log((double));
Mid=(int)K;
L1=Beiz[begin][Mid][];
L2=Beiz[end-C2[Mid]+][Mid][];
return min(L1,L2);
}

【解题报告】Math的更多相关文章

  1. Codeforces Round #382 (Div. 2) 解题报告

    CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...

  2. LeetCode 1 Two Sum 解题报告

    LeetCode 1 Two Sum 解题报告 偶然间听见leetcode这个平台,这里面题量也不是很多200多题,打算平时有空在研究生期间就刷完,跟跟多的练习算法的人进行交流思想,一定的ACM算法积 ...

  3. 北邮新生排位赛1解题报告d-e

    话说cdsn要是前面插入源代码又什么都不放就会出现奇怪的源代码?不知道是哪个网页的 407. BLOCKS 时间限制 1000 ms 内存限制 65536 KB 题目描述 给定一个N∗M的矩阵,求问里 ...

  4. 2014 ACM/ICPC 鞍山赛区现场赛 D&amp;I 解题报告

    鞍山现场赛结束了呢-- 我们出的是D+E+I三道题-- 吾辈AC掉的是D和I两道,趁着还记得.先在这里写一写我写的两道水题D&I的解题报告吧^_^. D题的意思呢是说星云内有一堆排成一条直线的 ...

  5. 2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)

    官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...

  6. ZOJ_3950_How Many Nines 解题报告及如何对程序进行测试修改

    The 17th Zhejiang University Programming Contest Sponsored by TuSimple Solution: #include <stdio. ...

  7. LeetCode: 【L4】N-Queens 解题报告

    [L4]N-Queens 解题报告 N-Queens Total Accepted: 16418 Total Submissions: 63309 My Submissions The n-queen ...

  8. "1001. A+B Format (20)" 解题报告

    Github : git@github.com:Circlecos/object-oriented.git PDF Of Markdown : "1001. A+B Format (20)& ...

  9. LeetCode 新题: Find Minimum in Rotated Sorted Array 解题报告-二分法模板解法

    Find Minimum in Rotated Sorted Array Question Solution Suppose a sorted array is rotated at some piv ...

  10. 【LeetCode】3Sum Closest 解题报告

    [题目] Given an array S of n integers, find three integers in S such that the sum is closest to a give ...

随机推荐

  1. 石头剪刀布 OpenJudge 1.6.08

    石头剪刀布是常见的猜拳游戏.石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负. 一天,小A和小B正好在玩石头剪刀布.已知他们的出拳都是有周期性规律的,比如:"石头-布-石头-剪 ...

  2. FZU 2089 数字游戏

    Problem 2089 数字游戏  Problem Description 现在,给你2个整形数字A和B.你的任务就是计算出A+B的结果C后,统计C中数字5出现的次数.  Input 输入数据第一行 ...

  3. ECMAScript6之String类型的扩展

    String类型的扩展 模板字符串 模板字符串是字符串的增强版,既可以当做普通的字符串使用,也可以在字符串中嵌入变量,它用反引号`来表示. //普通字符串 `In javascript '\n' is ...

  4. [MFC美化] SkinSharp使用详解1-使用方法

    需要注意的是: 加载换肤后,程序关闭时,无需调用卸载皮肤接口,SkinSharp换肤库会自己完成清理工作.换肤时无需卸载皮肤,直接调用即可. 其DLL使用方法与前面几种皮肤库用法类似.如下: 1. 将 ...

  5. android之控件与布局

    基本控件:TextViewButtonEditTextImageViewAlertDialog.BubliderProgressDialog 四种基本布局的特殊属性: LinerLayout andr ...

  6. css基础和心得(三)

    OK!接下来我们分别说这些元素的意义.首先,什么是块级元素?在html中<div>,<p>,<h1>,<form>,<ul>和<li& ...

  7. 单向链表仿LinkedList

    public class ChainTable { private Node firstNode;//第一个节点 private Node lastNode;//最后一个节点 private int ...

  8. ES 6 : let与const

    1.let命令 [ 基本用法 ] let命令的用法与var类似,用于声明一个变量,但是let声明的变量只能在let所在的代码块内有效: 上述代码块中使用let和var声明了两个变量.然后在代码块之外调 ...

  9. sqlserver 操作xml

    1.xml.exist    输入为XQuery表达式,返回0,1或是Null.0表示不存在,1表示存在,Null表示输入为空 2.xml.value    输入为XQuery表达式,返回一个SQL ...

  10. tomcat解压版安装(摘自网络)

    配置Tomcat[解压版] 选择解压版的Tomcat的理由是可以让我们使用多个Tomcat,但是配置上就会出现一些问题,需要我们手动进行更改配置.我的Tomcat版本是:apache-tomcat-6 ...