首页 > 其他分享 >ARC169 B Subsegments with Small Sums 题解

ARC169 B Subsegments with Small Sums 题解

时间:2023-12-10 10:56:54浏览次数:25  
标签:ARC169 nxt int 题解 long maxn 端点 一段 Small

Link

ARC169 B Subsegments with Small Sums

Question

\(x\) 是一个序列,定义 \(f(x)\) 为把序列 \(x\) 切成几段,每段的和不能超过 \(S\) 的最小段数

给出序列 \(A=(A_1,A_2,\cdots,A_N)\) 求:

\[\sum_{1\le l\le N}f((A_l,A_{l+1},\cdots,A_r)) \]

Question

先考虑一个结论,\(x\) 为任意序列,\(f(x)\) 是如何构造的:从头开始,如果这一段的加和超过了 \(S\),新开一段,否则就把下一个数加到这一段里面,这样分的段数是最少的。

然后思考枚举左端点,观察右端点

image.png

如果右端点在第一个区间里面的画,那么这一段的答案都是 \(1\),如果右端点在第二个区间里面的画,这一段的答案都是 \(2\),如果右端点在第三个区间里面的话,这一段的答案都是 \(3\),以此类推

我们定义 \(F[i]\) 表示以 \(i\) 为左端点,右端点 \(R>i\) 的所有贡献之和,很容易可以得出 \(F[i]=F[nxt[i]+1]+(N-nxt[i])\),其中 \(nxt[i]\) 表示以 \(i\) 为起点的这一段不大于 \(S\) 的终点的位置

反过来刷 DP 或者记忆化 DFS 都能得到答案

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long LL;
const int maxn=25;
int N;LL S,ans,a[maxn];
int nxt[maxn],s[maxn];
int F[maxn];
int DFS(int x) //x开始往后的值
{
    if(F[x]!=-1){
        return F[x];
    }
    if(nxt[x]>N) return F[x]=(N-x+1); 
    return F[x]=(nxt[x]-x)+DFS(nxt[x])+(N-nxt[x]+1);
}
signed main(){
    freopen("B.in","r",stdin);
    scanf("%lld%lld",&N,&S);
    for(int i=1;i<=N;i++) scanf("%lld",&a[i]),s[i]=s[i-1]+a[i];
    for(int i=1;i<=N;i++) F[i]=-1;
    int pos=1;
    for(int i=1;i<=N;i++){
        while(pos<=N&&s[pos]-s[i-1]<=S)
            pos++;
        nxt[i]=pos;
    }
    for(int i=1;i<=N;i++){
        ans+=DFS(i);
    }
    printf("%lld\n",ans);
    return 0;
}

标签:ARC169,nxt,int,题解,long,maxn,端点,一段,Small
From: https://www.cnblogs.com/martian148/p/17892254.html

相关文章

  • ARC169 A Please Sign
    LinkARC169APleaseSignQuestion给出长度为\(n\)的数组\(A\),以及长度为\(n-1\)的数组\(P\),满足\(P_i<i\),\(P\)标号为\(2\simn\)每一轮操作为\(A_{P_i}\leftarrowA_i+A_{P_i}\)求无限轮后,\(A_1\)值的正负性Solution由于\(P_i<i\)所以可以把问题抽象成树......
  • P9915 「RiOI-03」3-2 题解
    更好的阅读这是一道找规律的题目。因为我个人习惯,以下部分使用从\(1\)开始的下标讲述。首先我们以\(1\)来说:发现在第\(x\)行\(y\)列的连通块是可以直接连到第\(1\)列的,所以很容易可以得出\(1\)到\(y\)列的连通块数量是\(2^y-1\)。接着,我们考虑再后面的情况:......
  • 常见问题解决 --- pip SSLEOFError
    问题C:\Users\Administrator\Desktop>pipinstallscapy-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.comLookinginindexes:http://pypi.douban.com/simpleWARNING:Retrying(Retry(total=4,connect=None,read=None,redirect=None,status=None......
  • 【题解】CQOI2017 - 小 Q 的表格
    【题解】CQOI2017-小Q的表格https://www.luogu.com.cn/problem/P3700首先考虑题面给的两个式子。由式二可以得到:\[\dfrac{f(a,a+b)}{a(a+b)}=\dfrac{f(a,b)}{ab}\]发现这个很像辗转相除,可得\[\dfrac{f(a,b)}{ab}=\dfrac{f(a,a\bmodb)}{a(a\bmodb)}\]然后由式一转换,最......
  • CF1773J King's Puzzle 题解
    题意:思路:当$k\gen$时,一定无法构造。证明:$n$个点的无向图,每个点的度数$d∈[1,n-1]$,度数的种数一定不会超过$n-1$。当$k\len-1$时,构造方案如下:首先,选取前$k+1$个点,构造成一条链,此时链上各点的度数为$1$,$2$,$2$,$...$,$2......
  • CF1777C Quiz Master 题解
    题意:思路:由于需要维护极差,因此将$a$排序;由于相同的数对因子的种类和极差的贡献重复,因此将$a$去重。设满足条件且极差最小的方案为:$a_1$,$a_3$,$a_4$,$a_7$,$a_9$,该方案等价于区间$[1,9]$。因此,满足条件且极差最小的方案一定为一个连续的区间$[l,r......
  • JOISC2018 题解
    ContestLinkA.ConstructionofHighwayProblemLink题目大意给\(n\)个点,初始每个点有权值\(w_i\),\(n-1\)次操作连一条边\(u\getsv\),其中\(u\)与\(1\)连通,\(v\)与\(1\)不连通,求\(1\tou\)路径上权值的逆序对数,然后把路径权值推平为\(v\)的权值。数据范围......
  • CF1838C No Prime Differences 题解
    题意:思路:构造:$n$行$m$列,先填奇数行,每行填$m$个,第$2i-1$行依次填入$(i-1)\cdotm+1$,$(i-1)\cdotm+2$,$...$,$i\cdotm-1$,$i\cdotm$,剩下的依次填入偶数行即可。证明:构造完成后,对于每行,相邻两项的差值均为$1$,一定不为......
  • JOISC2019 题解
    ContestLink\(\text{ByDaiRuiChen007}\)A.ExaminationProblemLink题目大意有\(n\)个二元组\((a,b)\)和\(q\)个询问\((x,y,z)\),每个询问求满足\(a\gex\),\(b\gey\),\(a+b\gez\)的二元组个数。数据范围:\(n,q\le10^5\)。思路分析直接CDQ求三维偏序即可,注......
  • PTA-第三次机考题解
    PTA-第三次机考题解7-1玩游戏一典型的二分模版题,之前发的第十一次练习题目中对二分有详细的讲解,这道题就是二分的第二种模版,原封不动。相信认真看过的同学还是有思路的。嘿嘿!给没有看过的同学下面再讲一次二分:直接讲整数二分,浮点数二分只需要修改细节就好(直接讲两种模版,所有......