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=" ...
随机推荐
- iOS之UI--使用SWRevealViewController 实现侧边菜单功能详解实例
iOS之UI--使用SWRevealViewController 实现侧边菜单功能详解实例 使用SWRevealViewController实现侧边菜单功能详解 下面通过两种方法详解SWReveal ...
- 4. 基本TCP套接字编程
基本函数接口 socket函数 #include <sys/socket.h> int socket(int family, int type, int protocol); 成功时返回一 ...
- Vs2012在Linux开发中的应用(6):改写Makefile项目的Build过程
MSBUILD的编译过程实际上是依据一系列的targets文件定义的.当我们在IDE运行生成.批生成.清理命令的时候.VS会查找这些命令相应的Task并运行它,以下我们逐个分析这个过程. 当运行生成操 ...
- Entity Framework 6 Code First系列1: 实体类1:1配置
从4.1版本开始,EF开始支持Code First模式,值得注意的是Code First不是和DataBase First或Model First平级的概念,而是和EDM平级的概念.使用Code Fi ...
- exists用在linq上
SQL里面,有时候会用到exists或者not exists. select * from yb t1 where not exists(select 1 from yb t2 where trunc ...
- bzoj5483: [Usaco2018 Dec]Balance Beam
又又又又又又又被踩爆了 首先容易写出这样的期望方程:f(1)=max(d(1),f(2)/2),f(n)=max(d(n),f(n-1)/2), f(i)=max(d(i),(f(i-1)+f(i+1 ...
- POJ 2421 Constructing Roads (Kruskal算法+压缩路径并查集 )
Constructing Roads Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19884 Accepted: 83 ...
- WPF之Binding深入探讨 转载:http://blog.csdn.net/fwj380891124/article/details/8107646
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- Oracle安装:silent安装方式
之前一直是通过图形界面来安装oracle,这次上机考试说用silent (静默)形式安装.一点头绪都没有,虽然当时提供了oracle官方文档. 遂查找资料,安装了一下: 一.准备工作: 1.系统参数调 ...
- CF_576D_Flights for Regular Customers_矩阵乘法+倍增floyd+bitset+bfs
CF_576D_Flights for Regular Customers_矩阵乘法+倍增floyd+bitset https://www.luogu.org/problemnew/show/CF57 ...