博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
#6435. 「PKUSC2018」星际穿越
阅读量:5260 次
发布时间:2019-06-14

本文共 1815 字,大约阅读时间需要 6 分钟。

考场上写出了70分,现在填个坑

比较好写的70分是这样的:(我考场上写的贼复杂)

\(L(i)=\min_{j=i}^nl(j)\)

那么从i开始向左走第一步能到达的就是\([l(i),i-1]\)(显然)

第二步能到达的是\([L(l(i)),l(i)-1]\)

为什么呢,因为i一开始可以直接向左,也可以先向右走到\(l\)最小的位置然后向左,这时能跳到的区间就是\([L(i),i]\)

如果\(L(l(i))=L(i)\)显然这是一种方案,但是有可能\(L(l(i))<L(i)\),既然小了肯定是\(l(k)(k\in[l(i),i))\)这一部分\(<L(i)\),那么当然也是可行的

后面就是\([L(L(\cdots L(l(i))\cdots)),上一个的左端点]\)了,一直推下去。

#include
#define il inline#define vd voidtypedef long long ll;il int gi(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-')f=-1; ch=getchar(); } while(isdigit(ch))x=x*10+ch-'0',ch=getchar(); return x*f;}int l[300010],L[300010];ll D[5010][5010];//D[i][j]表示从i开始到[j,i-1]的跳的次数之和int main(){ int n=gi(); for(int i=2;i<=n;++i)l[i]=gi(); L[n]=l[n];for(int i=n-1;i>1;--i)L[i]=std::min(l[i],L[i+1]); for(int i=2;i<=n;++i){ int x=l[i],lst=i; for(int j=x;j

优化很显然是倍增,很容易想到\(f[i][j]\)设为\(i\)位置向前跳\(L(i)\)\(2^j\)次。

再来一个\(g[i][j]\)设为\(i\)位置向前跳\(2^j\)次,这中间每个位置跳的次数的和。随便理解一下就行了。

#include
#define il inline#define vd voidtypedef long long ll;il int gi(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-')f=-1; ch=getchar(); } while(isdigit(ch))x=x*10+ch-'0',ch=getchar(); return x*f;}int l[300010],L[300010];int f[19][300010];ll g[19][300010];il ll solve(int x,int y){ if(l[x]<=y)return x-y; ll ret=x-l[x];int i,j; x=l[x]; for(i=18,j=1;~i;--i) if(f[i][x]>=y){ ret+=g[i][x]+j*(x-f[i][x]); j+=1<
1;--i)L[i]=std::min(l[i],L[i+1]); for(int i=1;i<=n;++i)f[0][i]=L[i],g[0][i]=i-L[i]; for(int i=1;i<19;++i) for(int j=1;j<=n;++j){ f[i][j]=f[i-1][f[i-1][j]]; g[i][j]=g[i-1][j]+g[i-1][f[i-1][j]]+(1<

转载于:https://www.cnblogs.com/xzz_233/p/10022691.html

你可能感兴趣的文章
NPOI处理Word文本中上下角标
查看>>
Android笔记 Handler
查看>>
如何阅读大型前端开源项目的源码(转)
查看>>
java.util.Arrays类详解
查看>>
idea搭建tocmat
查看>>
NYOJ-626-intersection set(二分查找)
查看>>
项目管理之路(1):初步踏入项目管理
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
echarts饼图显示百分比
查看>>
JMS消息
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
php上传文件及头像预览
查看>>
大四java实习生的一些经历
查看>>
线程池的概念
查看>>
code First 四
查看>>
Django与Ajax
查看>>
Oracle_Statspack性能诊断工具
查看>>
转获取sql维护的表关系
查看>>
网络基础——TCP/IP五层模型
查看>>
Java 序列化
查看>>