前言
水水水水水大水题QAQ... ...
自己没把握好得100分得机会QAQ... ...
听歌的时候发现歌词好合适我见到100分飞了的心情:
题目
Input
Output
输出文件名为linear.out。
输出一行两个自然数,用空格隔开,依次为L和R。
Sample Input
5 1 3 2 3 3 5 5 5 6 7
Sample Output
3 5
【数据范围】
分析
最开始题意没看懂...考试结束后才发现自己是真的没看懂,不然会发现本题很简单的emmmmm....
可能还是因为自己看到数学有关的题就有点紧张、有点畏惧
虽然题目很难看懂,但还是很良心的,因为给了我们一个启发: 峰值是一段区间
把x的取值范围想象为”框”,fmin(y)这个函数就是求y到每个框的最小距离之和
做法类似初中学的【零点分段】,例如:
当时,y有三种情况:
最小值为3-y
最小值为y-5
显然观察可得出:当3<=y<=5时,肯定有个x值能与y重合,使得值为0
现在解决更复杂的问题:有多个区间,求y能够在的区间,使得y到每个区间的值的和最小
将各区间的端点排序,取中间两个点即为答案
AC代码
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=1e5;
int a[2*MAXN+5];
int n,tot;
int main()
{
//freopen("linear.in","r",stdin);
//freopen("linear.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&a[++tot],&a[++tot]);
sort(a+1,a+tot+1);
printf("%d %d",a[tot/2],a[tot/2+1]);
return 0;
}
番外
打完题解后听到的歌的歌词:
I do whatever it takes.