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

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. STURTS2 HELLOWORLD

    4. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC " ...

  2. trove datastore 浅析

    以下代码来自trove/datastore该目录下一共有4个文件__init__,views,models,service大概关系(主要是wsgi吧,没仔细学过,简单的从代码上做推测),service ...

  3. web.xml讲解

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "- ...

  4. 关于_cmd

    实际上是该方法名(@selector的名称). 比如: - (void)someCategoryMethod { NSString *string = objc_getAssociatedObject ...

  5. OSI七层模型详解

    OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...

  6. 利用Runtime给UITextView添加占位符(新方法)

     以前一直使用自定义UITextView通过通知中心来自定义placeHolder,最近看到这个方法,感觉更好 UITextView *textView = [[UITextView alloc]in ...

  7. 【转】如何将ACCESS数据库后缀名accdb改为mdb

    office 2007中的ACCESS数据库保存时,默认的后缀名是*.accdb, 但是在数据库编程中,用到的后缀名却是*.mdb, 不能直接将后缀名由 accdb 改为 mdb,虽然没有出错,但是编 ...

  8. (从零开始java开发) IDEA+MAVEN构建一个webapp骨架项目(解决一直downloading问题)

    折腾了一段时间终于解决了, 可能是因为网络问题 xml一直没法访问 maven 骨架生成项目速度慢的令人发指,都在Generating project in Batch mode等待,Idea状态显示 ...

  9. jquery中get传输方法实现读取xml文件

    xml文件: <?xml version="1.0" encoding="gb2312"?> <china> <province ...

  10. eclipse背景主题

    长时间对着电脑敲代码,眼睛受不了啊,果然程序员就没人权吗?之前咱给codeblocks背景换了颜色,去官网上粘粘代码然后替换一下就行了,这里不多说, 这里说的是给ecllipse换主题,按理说ecli ...