首页 > 其他分享 >AtCoder Regular Contest 169

AtCoder Regular Contest 169

时间:2023-12-12 10:55:26浏览次数:36  
标签:AtCoder le boring sum texttt ge Regular 169 最优

A - Please Sign

某个 \(A_i\) 对 \(A_1\) 的贡献是 \(\binom{10^{100}}{\mathrm{dep}_i}\),所以深度为 \(d\) 的节点的 \(A_i\) 之和只要不为 \(0\),其贡献就一定远大于深度 \(<d\) 的所有点的贡献之和。

从大到小找到第一个和非零的深度即可。

B - Subsegments with Small Sums

直接考虑以每个位置为开头的段在答案中出现了多少次即可。

C - Not So Consecutive

直接 DP,设 \(f_{i,j}\) 表示当前考虑了前 \(i\) 个位置,且第 \(i\) 个位置填的数是 \(j\) 的方案数。转移是

\[f_{i,j}=\sum_{\max(\mathrm{last}_j,i-j)\le k<i} \sum_{l\neq j} f_{k,l}. \]

其中 \(\mathrm{last}_j\) 表示最大的 \(k\) 使得 \(k\le i\land A_k\neq -1\land A_k\neq j\)。

前缀和优化一下,可以做到 \(O(N^2)\)。

D - Add to Make a Permutation

首先,假设我们不进行取模操作,设最后得到的数列是 \(B_1,B_2,\dots,B_N\),那么只需要 \(B_i\bmod N\) 互不相同,即可满足条件。

考虑什么样的 \(B\) 是可以得到的。设 \(S=\sum_{1\le i\le N} (B_i-A_i)\),需要:

  • \(B_i\ge A_i\);
  • \(M\mid S\);
  • \(B_i-A_i\le \frac{S}{M}\)。

(赛时我漏了第三个条件,而且用的是另外一种做法,没法处理这个条件。)

然后发现最优的 \(B\) 序列有一些性质:

性质 1:假如 \(A\) 是递增的,那么最优的 \(B\) 是不降的。

证明:交换一对逆序的 \(B_i\) 不会使 \(S\) 改变,且会使得 \(\max(B_i-A_i)\) 变小。

性质 2:假如 \(A\) 是递增的,那么最优的 \(B\) 形如 \([x,x+1,\dots,x+N-1]\)。

证明:由于 \(B\) 是递增的且 \(B_i\bmod N\) 互不相同,所以只要 \(B\) 不是这样的,就一定存在 \(i,j\) 使得 \(B_j>B_i+N\)。此时令 \((B_i,B_j)\gets (B_i+N,B_j-N)\),再将 \(B\) 数组排序,得到的 \(B\) 一定更优。

于是我们只需要找到最小的 \(x\),使得其对应的 \(B\) 序列是可以得到的。上面的第 \(1,3\) 条限制对应了 \(x\) 需要大于等于某个数;第二条对应了 \(x\equiv k\pmod{\frac{M}{\gcd(N,M)}}\),其中 \(k\) 是某个数。

E - Avoid Boring Matches

怎么想到的???

首先考虑判定一个串 \(S\) 是不是 boring 的。

如果 \(S\) 中 \(\texttt{R}\) 的个数大于一半,就一定是 boring 的。

  • 假如 \(S_1=\texttt{R}\),那么它和最后一个 \(\texttt{B}\) 配对一定是最优的;
  • 否则,它和它后面的第一个 \(\texttt{R}\) 配对是最优的。

这样就可以将长为 \(2^N\) 的串以最优的方式缩成长为 \(2^{N-1}\) 的串。

考虑所有长为 \(2^N\) 且不 boring 的串中,字典序最大的一个,设为 \(T\)。\(T\) 可以通过反向模拟上面的贪心过程得到。有结论:

对于串 \(S\),设 \(f_S(i)\) 表示将 \(S\) 中的 \(\texttt{R}\) 看作 \(-1\),\(\texttt{B}\) 看作 \(1\),\(i\) 位置的前缀和。

\(S\) 不是 boring 的,当且仅当对于每个 \(i\),都有 \(f_S(i)\ge f_T(i)\)。

回到原问题,算出每个 \(f_S(i)\),交换相邻的 \(\texttt{R},\texttt{B}\) 对 \(f\) 的影响就是将 \(\texttt{R}\) 所在的位置 \(+2\)。并且,只要存在至少一个位置使得 \(f_S(i)<f_T(i)\),就一定可以将某个这样的位置 \(+2\)。

所以答案就是

\[\sum_{1\le i\le 2^N} \max\left(0,\frac{f_T(i)-f_S(i)}{2}\right). \]

F - Large DP Table

关键结论:

考虑两个点 \((a,b),(c,d)\) 满足 \(c\ge a,d\ge b\)。将 \((c,d)\) 走到 \((1,1)\) 的那条路径画出来,路径会穿过 \(Y=b\) 这条线(也就是说,\(X_a,X_{a+1},\dots,X_{N}\) 中有某一个造成了一次贡献),当且仅当 \(\min_{a\le i\le c} A_i<\min_{b\le i\le d} B_i\)。否则,路径会穿过 \(X=a\) 这条线。

然后用单调栈随便做做即可。时间复杂度 \(O(N)\)。

标签:AtCoder,le,boring,sum,texttt,ge,Regular,169,最优
From: https://www.cnblogs.com/alan-zhao-2007/p/17896293.html

相关文章

  • AtCoder Beginner Contest 332 (D)
    题目链接思路:这就是一个二维的全排列问题代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;#defineLNF0x3f3f3f3f3f3f3f3f#defineINF0x3f3f3f3f#defineIOSios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);#definepllp......
  • ATCoder 332 A-D
    A: OnlineShopping(读懂题即可)packageAtCoder.begin332;importjava.util.Scanner;publicclassA{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt(),s=sc.nextInt(),k=sc.nextInt(......
  • 【题解】AtCoder abc322_f Random Update Query
    传送门:https://atcoder.jp/contests/abc332/tasks/abc332_f容易发现,对于一个位置$i$,$A_i$的最终值是由对$i$的最后一次赋值操作决定的;因此,将所有操作按时间顺序倒过来考虑,则由第$j$次操作决定$A_i$最终值的概率为"在第$(j+1)$~$m$次操作中没有修改过$i$的概率"与"第......
  • AtCoder Regular Contest 169 (ARC169)
    怎么有人ARCA卡了半天的?A.PleaseSign考虑\(i\)位置上的数,下次它被加到\(P_i\),再下次被加到\(P_{P_i}\),因为这个序列有性质\(P_i<i\),这样加若干轮一定会到达\(1\)。令所有的\(i\)向\(P_i\)连边,则这是一棵以\(1\)为根的树。设\(f_i=\sum\limits_{j=1}^n[dep_......
  • 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\)为......