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

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. IOS数据库操作SQLite3使用详解(转)

    iPhone中支持通过sqlite3来访问iPhone本地的数据库.具体使用方法如下1:添加开发包libsqlite3.0.dylib首先是设置项目文件,在项目中添加iPhone版的sqlite3的数 ...

  2. netty(4)高级篇-Websocket协议开发

    一.HTTP协议的弊端 将HTTP协议的主要弊端总结如下: (1) 半双工协议:可以在客户端和服务端2个方向上传输,但是不能同时传输.同一时刻,只能在一个方向上传输. (2) HTTP消息冗长:相比于 ...

  3. 各类数据库url

    msql: jdbc:mysql://127.0.0.1:3306/databaseName ms-sql jdbc:microsoft:sqlserver://127.0.0.1:1433;Data ...

  4. fpga之显示字符串

    //必须在有效区域下显示颜色才有颜色 显示字符可以在设定一个有效区域内显示 另加两个wire 求出新的x,ymodule vga_fpga( clk,rst_n, vga_b,vga_g,vga_r, ...

  5. Hadoop优先级调度

    当同时在集群中运行多个作业时,默认情况下,Hadoop将提交的作业放入一个FIFO,一个作业结束后,Hadoop就启动下一个作业. 当一个运行时间长但是优先级较低的作业先于运行时间短而优先级较高的作业 ...

  6. iOS跳转系统设置界面

    iOS开发之如何跳到系统设置里的各种设置界面:http://www.superqq.com/blog/2015/12/01/jump-setting-per-page/ iOS:你App的设置做对了吗 ...

  7. matlab里plot画多幅图像、设置总标题、legend无边框

    %%绘图 suptitle('公路')  %总标题subplot(2,2,1);plot(x,y11,'r-') hold onplot(x,y21,'b-')xlabel('方向')ylabel(' ...

  8. SpringFramework_module

    org.springframework : spring-aop:基于代理的AOP spring-aspects:基于切面的AspectJ spring-beans:beans spring-cont ...

  9. 10s后自动跳转

    <div class="jf_register"> <h2>您好,欢迎光临<fmt:message key="b2cShowName&quo ...

  10. php常用数学函数

    php常用数学函数1. bcadd 任意精度数的相加2. bcsub 任意精度数的减法3. bcmul 乘法, bcdiv除法 4. bcmod 取余数. (比%功能更强大)5. bcpow 幂函数运 ...