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=" ...
随机推荐
- java上下文Context类
Context在Java中的出现是如此频繁,但其中文翻译"上下文"又是如此诡异拗口,因此导致很多人不是很了解Context的具体含义是指什么,所以很有必要来深究一下这词的含义. 先 ...
- easyui tree的简单使用
Tree 数据转换 所有节点都包含以下属性: id:节点id,这个很重要到加载远程服务器数据 which is important to load remote data text: 显示的节点文本 ...
- PHP获取类名及所有函数名
PHP获取当前类名.方法名 __CLASS__ 获取当前类名 __FUNCTION__ 当前函数名(confirm) __METHOD__ 当前方法名 (bankcard::confirm) _ ...
- 解决ubuntu没有/var/log/messages的问题
1:root身份打开 /etc/rsyslog.d/50-default.conf 2:把注释#去掉 #*.=info;*.=notice;*.=warn;\ # auth,authpriv.none ...
- How to create a List of ValueTuple?
ValueTuple需要通过NuGet安装System.ValueTuple https://docs.microsoft.com/en-us/dotnet/csharp/tuples?view=ne ...
- YTU 1055: 输入字符串以及输出
1055: 输入字符串以及输出 时间限制: 1 Sec 内存限制: 128 MB 提交: 694 解决: 476 题目描述 编写一函数,由实参传来一个字符串,统计此字符串中字母.数字.空格和其它字 ...
- linux:在vmware上模拟新加一个硬盘对其格式化分区
在实际情况中,很容易有系统硬盘空间不够,然后需要添加新硬盘情况:这里我用vmware来模拟实验: 一:在一个Linux vmware上创建一个虚拟硬盘 1.打开vmware,选择一个已经搭建好的l ...
- codeforces 667B B. Coat of Anticubism(水题)
题目链接: B. Coat of Anticubism time limit per test 1 second memory limit per test 256 megabytes input s ...
- can't set android permissions - built without android support
/**************************************************************************** * can't set android pe ...
- 洛谷 P1578 奶牛浴场 —— 最大子矩形
题目:https://www.luogu.org/problemnew/show/P1578 枚举左边界,向右枚举右边界,同时不断限制上下边界,最后右边界是整个图的边界: 由于没有做左边界是整个图的边 ...