ARC 100 C - Linear Approximation题解---三分法
题目链接:
分析:
比赛时做这题想到一个瞎搞的方法就是在平均数上下波动一下取最小值,然后大佬yjw学长说这就是个严格单调单峰函数直接三分法就好了,虽然之前就听过则还是第一次打
三分法
设有最大值函数f(x)定义域为\([l,r]\),我们在定义域内找两个点\(lmid,rmid(lmid<rmid)\)
若\(f(lmid)<f(rmid)\),要么\(lmid\)和\(rmid\)都在单峰左边,要么\(lmid\)在左边,\(rmid\)在右边,但无论怎样\(lmid\)都在单峰左边,于是将\(l=lmid\)
若\(f(rmid)<f(lmid)\),分析相似,将\(r=rmid\)
若\(f(lmid)==f(rmid)\)emmm这个其实我也不知道怎么处理,随便按上面一种情况来吧但总感觉不太稳
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <map>
#include <queue>
#include <algorithm>
#define ri register int
#define ll long long
using namespace std;
const int maxn=200005;
const int inf=0x7fffffff;
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;
return ;
}
int n;
ll a[maxn];
ll sum=0;
inline ll solve(int k){
ll cnt=0;
for(ri i=1;i<=n;i++)cnt+=abs(a[i]-k);
return cnt;
}
int main(){
read(n);
for(ri i=1;i<=n;i++){
read(a[i]);
a[i]=a[i]-i;
}
ll ans,lmid,rmid;
ll l=-1e9,r=1e9;
while(l<r-1){
lmid=(l+r)>>1,rmid=(lmid+r)>>1;
if(solve(lmid)>solve(rmid))l=lmid;
else r=rmid;
}
if(solve(l)<solve(r))ans=l;
else ans=r;
printf("%lld\n",solve(ans));
return 0;
}
ARC 100 C - Linear Approximation题解---三分法的更多相关文章
- ARC 100
链接 https://arc100.contest.atcoder.jp/ C Linear Approximation 题解 把ai减去i后排序, 我们要的b就是排完序后的中位数 Code #inc ...
- 网易2018.03.27算法岗,三道编程题100%样例AC题解
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8660814.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- 【AtCoder】 ARC 100
link C-Linear Approximation 给出\(N\)个数\(A_1,A_2,...,A_N\) ,求一个数\(d\),最小化\(\sum_{i=1}^N|A_i-(d+i)|\) 把 ...
- ARC-100 C - Linear Approximation
题面在这里! 可以看成点集{a[i]-i}和b之间距离的和,于是找到中位数就可以直接算了2333. #include<bits/stdc++.h> #define ll long long ...
- ARC100C Linear Approximation
传送门 分析 这道题真的好水呀QwQ,想必大家都知道对于式子|x-2|+|x-3|x取什么值可以使式子结果最小,这道题也是这个原理,只需要将要额外减的1.2.3……提前减掉就行了. 代码 #inclu ...
- 【AtCoder】ARC100 题解
C - Linear Approximation 找出\(A_i - i\)的中位数作为\(b\)即可 题解 #include <iostream> #include <cstrin ...
- canvas对象arc函数的使用-遁地龙卷风
(-1)写在前面 我用的是chrome49 <canvas id="lol" height="300"></canvas> (1)详细介 ...
- HTML5 Canvas arc()函数//////////////////////(转)
HTML5 Canvas arc()函数 实例 创建一个圆形: var c=document.getElementById("myCanvas"); var ctx=c.get ...
- HTML5 Canvas arc()函数
实例 创建一个圆形: var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d") ...
随机推荐
- OSI的七层模型和TCP/IP的五层模型
OSI七层模型: 应用层->表示层->会话层->传输层->网络层->数据链路层->物理层 TCP/IP五层模型: 应用层->传输层->网络层->数 ...
- leetcode-hard-array-128. Longest Consecutive Sequence
mycode 92.62% class Solution(object): def longestConsecutive(self, nums): """ :type ...
- itertools模块中的product方法
itertools模块中的product方法 itertools.product(*iterables[, repeat]) 笛卡尔积 创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔 ...
- RequestsLibrary接口测试
RequestsLibrary常用的关键字 关 键 字 描 述 Create Session 创建HTTP会话 Get Request 采用get方式请求 Post Request 采用Pos ...
- 手机APP流量的发送与获取功能的实现
package com.loaderman.trafficdemo; import android.content.Context; import android.content.Intent; im ...
- 安德鲁1.2Ku全下125C波(CCTV4K除外)
闲来无事.没事挑战下难度. 前面高楼挡住了,一直没有试过125, 没想到1.2的锅能全下 机器:恐龙机dinobot4K+ 天线:安德鲁1.2ku 接送结果:除4K外所有高清 图片如下
- .net core 入门一
官网教程:https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/?view=aspnetcore-3.0&tabs=wind ...
- springboot和springcloud版本冲突问题
最近搭建eureka项目,出现boot和cloud版本不匹配错误,记录下来 2019-12-06 14:00:20.043 ERROR 180780 --- [ main] o.s.boot.Spri ...
- 【ABAP系列】【第五篇】SAP ABAP7.50 之用户接口
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列][第五篇]SAP ABAP7.5 ...
- 当C++使用引用传递参数时,应当注意的问题
如果实参与引用参数不匹配,C++将生成临时变量.如果引用参数是const,则编译器在下面两种情况下生成临时变量: 实参类型是正确的,但不是左值 实参类型不正确,但可以转换为正确的类型 左值参数是可被引 ...