ARC 100
链接
https://arc100.contest.atcoder.jp/
C Linear Approximation
题解
把ai减去i后排序, 我们要的b就是排完序后的中位数
Code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll read(){
ll x=,f=;char c=getchar();
while(c<'' || c>''){if(c=='-')f=-;c=getchar();}
while(c>='' && c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int n;
int a[];
map<int,int> m; int main(){
#ifdef LZT
freopen("in","r",stdin);
#endif
n=read();
for(int i=;i<=n;i++) a[i]=read()-i;
ll ans=;
sort(a+,a+n+);
int mx=a[(n+)/];
for(int i=;i<=n;i++) ans+=abs(a[i]-mx);
printf("%lld\n",ans);
return ;
}
D Equal Cut
题解
如果只切一刀,那么很好确定位置
我们预处理出前i个和后i个切一刀的最佳位置
然后枚举中间的一刀的位置 然后前面后面两刀都处理出来了 算一下取最大值就好
Code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll read(){
ll x=,f=;char c=getchar();
while(c<'' || c>''){if(c=='-')f=-;c=getchar();}
while(c>='' && c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int n;
ll a[];
ll fen1[],fen2[];
pair<ll,ll> s1[],s2[]; int main(){
#ifdef LZT
freopen("in","r",stdin);
#endif
n=read();
for(int i=;i<=n;i++) a[i]=read();
ll pos=,sum=a[],sum2=a[];
for(int i=;i<=n-;i++){
sum2+=a[i];
while(pos<i){
ll nwsum=sum+a[pos+];
//cout<<sum2<<' '<<sum<<' '<<nwsum<<endl;
if(abs(sum2-sum-sum)>abs(sum2-nwsum-nwsum)){
pos++;
sum=nwsum;
}
else break;
}
//cout<<pos<<endl;
if(pos==i) sum-=a[pos],pos--;
fen1[i]=pos;
s1[i].first=sum;
s1[i].second=sum2-sum;
//cout<<i<<' '<<sum<<' '<<sum2-sum<<endl;
}
pos=n,sum=a[n],sum2=a[n];
for(int i=n-;i>;i--){
sum2+=a[i];
while(pos>i){
ll nwsum=sum+a[pos-];
if(abs(sum2-sum-sum)>abs(sum2-nwsum-nwsum)){
pos--;
sum=nwsum;
}
else break;
}
if(pos==i) sum-=a[pos],pos++;
fen2[i]=pos;
s2[i].first=sum;
s2[i].second=sum2-sum;
//cout<<i<<' '<<sum<<' '<<sum2-sum<<endl;
}
ll ans=1e18;
for(int i=;i<=n-;i++){
ll S1=s1[i].first,S2=s1[i].second,S3=s2[i+].first,S4=s2[i+].second;
ans=min(ans,max(max(max(S1,S2),S3),S4)-min(min(min(S1,S2),S3),S4));
}
printf("%lld\n",ans);
return ;
} /*
5
3 2 4 1 2
*/
E Or Plus Max
题解
我们要求max Ai+Aj s.t. i or j <=x
可以转化成max Ai+Aj s.t. i or j =x 然后求一个前缀max
转化成max Ai+Aj s.t. i or j ∈ x 然后求一个前缀max
转化成(max Ai s.t. i ∈ x )+ (second_max Ai s.t. i ∈ x)
所以我们需要维护pair<int,int> b[x]表示所有i∈x的最大值和第二大值
所有i∈x => 快速Zeta变换
然后就做完了
Code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll read(){
ll x=,f=;char c=getchar();
while(c<'' || c>''){if(c=='-')f=-;c=getchar();}
while(c>='' && c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int n;
int a[];
pair<int,int> b[]; void upd(int x,int y){
int num1=b[x].first,num2=b[x].second,num3=b[y].first,num4=b[y].second;
b[x].first=max(num1,num3);
if(num1>num3) b[x].second=max(num2,num3);
else b[x].second=max(num1,num4);
} int main(){
#ifdef LZT
freopen("in","r",stdin);
#endif
n=read();
for(int i=;i<(<<n);i++)
a[i]=read();
for(int i=;i<(<<n);i++)
b[i].first=a[i],b[i].second=-1e9;
for(int k=;k<n;k++){
//cout<<k<<endl;
for(int i=;i<(<<n);i++){
if((i&(<<k))!=) continue;
upd(i|(<<k),i);
//cout<<(i|(1<<k))<<' '<<i<<endl;
}
}/*
for(int i=0;i+1<(1<<n);i++){
upd(i+1,i);
}*/
int lastans=;
for(int i=;i<(<<n);i++){
lastans=max(lastans,b[i].first+b[i].second);
printf("%d\n",lastans);
}
return ;
} /*
2
1 2 3 1
*/
F Colorful Sequences
ARC 100的更多相关文章
- 【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题解---三分法
题目链接: https://arc100.contest.atcoder.jp/tasks/arc100_a 分析: 比赛时做这题想到一个瞎搞的方法就是在平均数上下波动一下取最小值,然后大佬yjw学长 ...
- 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") ...
- 超多经典 canvas 实例,动态离子背景、移动炫彩小球、贪吃蛇、坦克大战、是男人就下100层、心形文字等等等
超多经典 canvas 实例 普及:<canvas> 元素用于在网页上绘制图形.这是一个图形容器,您可以控制其每一像素,必须使用脚本来绘制图形. 注意:IE 8 以及更早的版本不支持 &l ...
- arc路径-磊哥
不然直接设置80 90要转换成弧度比如Math.PI代表180度你就要 80*Math.PI/180190*Math.PI/180<!DOCTYPE html><html>&l ...
- 对canvas arc()中counterclockwise参数的一些误解
一直没有很细心地去研究CanvasRenderingContext2D对象的arc方法,对它的认识比较模糊,导致犯了一些错误,特发此文,以纠正之前的错误理解. arc()方法定义如下: arc() 方 ...
- HTML5 arc的例子
demo.html <!DOCTYPE html> <html lang="zh"> <head> <meta charset=" ...
随机推荐
- coco2d-x 3.0游戏实例学习笔记 《跑酷》 第二步---游戏界面&全新的3.0物理世界
说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程.用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写.并做相关笔记 ...
- android studio 非法字符: '\ufeff' 解决方式
今天发现一个问题,就是从其它地方拷贝的代码到AS项目里面,木有语法 错误,可是就是执行不起来,老是报错"非法字符: '\ufeff' ",郁闷非常久.木有看到这个字符.最后查询了这 ...
- IE8与vs2005冲突 添加MFC类向导错误解决方法—— internet explorer脚本错误
IE8 与 VS2005 冲突问题解决方法 问题表现为: MFC类向导添加类时,出现“当前页面的脚本发生错误”,进入MFC类向导后上方有一个小黄条“此网站的某个加载项运行失败.请检查"Int ...
- jvm 调优(2)垃圾回收算法
可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(Reference Counting): 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数. ...
- Oracle Exception
Oracle存储过程的异常处理 1.为了提高存储过程的健壮性,避免运行错误,当建立存储过程时应包含异常处理部分.2.异常(EXCEPTION)是一种PL/SQL标识符,包括预定义异常.非预定义异常和自 ...
- Android开发环境搭建时遇到问题的解决方法
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/linux_loajie/article/details/33823637 Android开发环境搭建 ...
- js-easyUI格式化时间
formatter : function(value, row) { if(value != null){ var date = new Date(value); var y = date.getFu ...
- 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- wukong引擎源码分析之搜索——docid有序的数组里二分归并求交集,如果用跳表的话,在插入索引时会更快
searcher.Search(types.SearchRequest{Text: "百度中国"}) // 查找满足搜索条件的文档,此函数线程安全 func (engine *En ...
- golang copy函数
数组切片内容复制 转自:http://studygolang.com/articles/4560 用于将内容从一个数组切片复制到另一个数组切片.如果加入的两个数组切片不一样大,就会按其中较小的那个数组 ...