首页 > 其他分享 >AtCoder Regular Contest 169 (ARC169)

AtCoder Regular Contest 169 (ARC169)

时间:2023-12-11 09:06:53浏览次数:28  
标签:ARC169 AtCoder int sum pos long dep Regular col

怎么有人 ARC A 卡了半天的?

A. Please Sign

考虑 \(i\) 位置上的数,下次它被加到 \(P_i\),再下次被加到 \(P_{P_i}\),因为这个序列有性质 \(P_i<i\),这样加若干轮一定会到达 \(1\)。
令所有的 \(i\) 向 \(P_i\) 连边,则这是一棵以 \(1\) 为根的树。

设 \(f_i=\sum\limits_{j=1}^n [dep_j=i] a_j\)。其中 \(dep_1=0\)。
那么 \(A_1=f_0\),一次操作相当于令所有 \(f_i\gets f_i+f_{i+1}\)。

首先如果 \(f\) 数组全都是 \(0\),\(A_1\) 操作很多次后显然还是 \(0\)。
考虑 \(f\) 最后一个不为 \(0\) 的位置的符号,设这个数为 \(f_x\)。若 \(f_x>0\),由于每次令 \(f_{x-1}\gets f_{x-1}+f_x\),\(f_{x-1}\) 一定会在若干次操作后变为正数。这可以类似地推广到 \(f_{x-2},f_{x-3},\dots\)。因此操作次数足够多时,有 \(f_0>0\),即 \(A_1>0\)。

\(f_x<0\) 同理。综上,我们得到结论:\(A_1\) 最后的符号与 \(f\) 数组最后一个不为 \(0\) 的位置符号相同。

Code
#define int long long
const int N=2.5e5+5,inf=2e9;
int n,a[N],p[N],f[N],dep[N],mx;
vector<int> e[N];
void dfs(int u)
{
    mx=max(mx,dep[u]);
    for(auto v:e[u]) 
    {
        dep[v]=dep[u]+1;
        dfs(v);
    }
}
signed main()
{
    n=read();
    for(int i=1;i<=n;i++) a[i]=read();
    for(int i=2;i<=n;i++) p[i]=read(),e[p[i]].push_back(i);
    dfs(1);
    for(int i=2;i<=n;i++) f[dep[i]]+=a[i];
    int flag=0;
    for(int i=n;i;i--)
        if(f[i]) {flag=f[i]>0?1:-1;break;}
    a[1]=flag*inf+a[1];
    if(a[1]>0) cout<<"+";
    else if(a[1]==0) cout<<"0";
    else cout<<"-";
    return 0;
}

B. Subsegments with Small Sums

先考虑一个确定的区间怎么求答案。

直接贪心,从左往右考虑这个序列,如果上一段能放下就放进上一段,否则新开一段。正确性比较显然。
那这个题就能做了:考虑左端点相同时每个右端点的答案,设这个和为 \(f_l\)。分为两种情况:

  • 只有一段,对答案的贡献为 \(1\);
  • 有至少两段,但根据上面的贪心,它们第一段结束的位置均相同。设这个位置是 \(x\)。

那么 \(r\ge x\) 的区间可以看作 \([x,r]\) 的答案加 \(1\),即有转移 \(f_l\gets f_x+(n-l+1)\),答案为 \(ans=\sum\limits_{i=1}^n f_i\)。
找 \(x\) 的过程双指针或二分均可。

Code
#define int long long
const int N=2.5e5+5;
int n,s,sum[N],a[N];
int f[N];
signed main()
{
    n=read(),s=read();
    for(int i=1;i<=n;i++) a[i]=read(),sum[i]=sum[i-1]+a[i];
    for(int i=n;i;i--)
    {
        int nxt=lower_bound(sum+1,sum+n+1,sum[i-1]+s+1)-sum;
        f[i]=f[nxt]+(n-i+1);
    }
    int ans=0;
    for(int i=1;i<=n;i++) ans+=f[i];
    printf("%lld\n",ans);
    return 0;
}

C. Not So Consecutive

读错题了,写了一车组合数还在想为什么过不去最后一个样例。

设 \(f_{i,j}\) 表示填了前 \(i\) 个位置,第 \(i\) 个位置填的是 \(j\) 的方案数。那么枚举这个连续段的起点,朴素转移有

\[f_{i,j}=\sum_{k=\max(0,i-j)}^{i-1} [\forall l\in [k+1,i],A_l=-1 \text{ or } A_l=j]\sum_{col\neq j} f_{k,col} \]

这样直接做是 \(\mathcal{O}(n^4)\) 的,考虑优化。

首先方括号里那一串式子本质上是找 \(i\) 前面最后一个填了不为 \(j\) 的数的位置,设这个位置为 \(lst\)。

对每个数维护 \(pos_j\) 表示数 \(j\) 当前最后一次出现的位置。那么对于每个新的 \(i\),我们记录 \(pos\) 的最大值和次大值即可。

这个过程对每个 \(i\) 可以 \(\mathcal{O}(n)\) 完成。式子变成了

\[f_{i,j}=\sum_{k=lst}^{i-1} \sum_{col\neq j} f_{k,col} \]

再把 \(col\neq j\) 这个条件容斥掉,有

\[f_{i,j}=\sum_{k=lst}^{i-1} \sum_{col=1}^n f_{k,col}-\sum_{k=lst}^{i-1}f_{k,j} \]

设 \(S_i=\sum\limits_{j=1}^i \sum\limits_{col=1}^n f_{i,col}\),\(s_{i,j}=\sum\limits_{k=1}^i f_{k,j}\),前缀和优化即可。时间复杂度 \(\mathcal{O}(n^2)\)。

Code
#define int long long
const int N=5005,mod=998244353;
int pos[N],f[N][N],s[N][N],sum[N],n,a[N];
signed main()
{
    n=read();
    for(int i=1;i<=n;i++) a[i]=read();
    f[0][0]=1,sum[0]=1;
    for(int i=1;i<=n;i++)
    {
        if(a[i]!=-1) pos[a[i]]=i;
        int mx1=0,mx2=0;
        for(int j=1;j<=n;j++) 
        {
            if(pos[j]>mx1) mx2=mx1,mx1=pos[j];
            else if(pos[j]>mx2) mx2=pos[j];
        }
        for(int j=1;j<=n;j++)
        {
            int lst=max(i-j,(a[mx1]==j)?mx2:mx1);
            f[i][j]=sum[i-1]-(lst?sum[lst-1]:0)-(s[i-1][j]-(lst?s[lst-1][j]:0));
            f[i][j]=(f[i][j]%mod+mod)%mod;
            s[i][j]=(s[i-1][j]+f[i][j])%mod;
            (sum[i]+=f[i][j])%=mod;
        }
        (sum[i]+=sum[i-1])%=mod;
    }
    cout<<(sum[n]-sum[n-1]+mod)%mod<<endl;
    return 0;
}

D. Add to Make a Permutation

你先别急。

标签:ARC169,AtCoder,int,sum,pos,long,dep,Regular,col
From: https://www.cnblogs.com/ying-xue/p/arc169.html

相关文章

  • AtCoder_abc332
    AtCoder_abc332比赛链接A-OnlineShoppingA题链接题目大意这里有\(N\)件商品,第\(i\)件商品价格为\(P_i\),你要购买\(Q_i\)件,除了购买的费用外,他还要支付运费。如果购买的总价大于\(S\),运费为0元,否则他需要支付\(K\)元的运费。他一共要花多少钱呢?解题思路无代码//Prob......
  • 【题解】AtCoder abc332_g Not Too Many Balls
    传送门:https://atcoder.jp/contests/abc332/tasks/abc332_g看完题,第一眼反应为最大流。建模方式为:以颜色为左部点,盒子为右部点,源点$S$向颜色$i$连一条容量为$A_i$的边,盒子$j$向汇点$T$连一条容量为$B_j$的边,颜色$i$向盒子$j$连一条容量为$ij$的边;在这张图......
  • AtCoder Beginner Contest 332
    AtCoderBeginnerContest332A-OnlineShoppingintmain(){IOS;for(_=1;_;--_){cin>>n>>m>>k;llans=0;rep(i,1,n){lla,b;cin>>a>>b;ans+=a......
  • Atcoder abc301 复盘(更新中)
    跳转比赛链接A-OverallWinner简述:高桥和青木下了\(N\)盘棋。给你一个长度为\(N\)的字符串\(S\),表示这两盘棋的结果。如果\(S\)的\(i\)个字符是t,那么高桥赢得了\(i\)局;如果\(S\)的\(i\)个字符是A,那么青木赢得了这局。高桥和青木之间的胜负关系是谁赢的局......
  • AtCoder Beginner Contest 331 G - Collect Them All【概率期望+容斥+多项式】
    题目链接:ABC331_G写在前面将来如果回顾这道题,建议自己看完题意一定先重新推一遍。如果还是不够熟练,多去做一些同类型的题目吧。题意:盒子里有\(N\)张卡片,每张卡片上写着一个数字,数字的范围是\(1,...,M\),写着数字\(i\)的卡片有\(C_i\)张\((C_i>0)\)。有放回地抽取卡片,每......
  • ARC169 B Subsegments with Small Sums 题解
    LinkARC169BSubsegmentswithSmallSumsQuestion\(x\)是一个序列,定义\(f(x)\)为把序列\(x\)切成几段,每段的和不能超过\(S\)的最小段数给出序列\(A=(A_1,A_2,\cdots,A_N)\)求:\[\sum_{1\lel\leN}f((A_l,A_{l+1},\cdots,A_r))\]Question先考虑一个结论,\(x\)为......
  • 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\)所以可以把问题抽象成树......
  • Daiwa Securities Co. Ltd. Programming Contest 2023(AtCoder Beginner Contest 331)
    DaiwaSecuritiesCo.Ltd.ProgrammingContest2023(AtCoderBeginnerContest331)A-Tomorrow解题思路:模拟。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;typedefpair<int,int>pii;#definefifirst#definesesecondcons......
  • Graph regularized non-negative matrix factorization with prior knowledge consist
    Graphregularizednon-negativematrixfactorizationwithpriorknowledgeconsistencyconstraintfordrug-targetinteractionspredictionJunjunZhang 1, MinzhuXie 2 3Affiliations expandPMID: 36581822 PMCID: PMC9798666 DOI: 10.1186/s1285......
  • Predict potential miRNA-disease associations based on bounded nuclear norm regul
    PredictpotentialmiRNA-diseaseassociationsbasedonboundednuclearnormregularizationYidongRao 1, MinzhuXie 1, HaoWang 1Affiliations expandPMID: 36072658 PMCID: PMC9441603 DOI: 10.3389/fgene.2022.978975 SigninFreePMCa......