首页 > 其他分享 >AtCoder Grand Contest 001

AtCoder Grand Contest 001

时间:2023-12-12 17:58:39浏览次数:32  
标签:lfloor AtCoder DAG 最大 奇数 拓扑 Contest 001 答案

比赛链接

A - BBQ Easy

从小到大排序以后,答案就是所有奇数位置之和。

B - Mysterious Light

发现去掉前两次反射以后,剩下的是一个在平行四边形内反射的过程,且形式类似于辗转相除。具体地,

\[F(n,x)=\begin{cases} -n & x=0\\ 2x\lfloor\frac{n}{x}\rfloor+F(x,n\bmod x) & x>0 \end{cases} \]

最后的答案就是 \(F(n-x,x)+n\)。

C - Shorten Diameter

直接 DP,设 \(f_{i,j}\) 表示考虑 \(i\) 子树内的一个以 \(i\) 为根的连通块,最大深度不超过 \(j\),且直径不超过 \(K\),的最大点数。合并子树信息是简单的。

D - Arrays and Palindrome

这个题就比较智慧了。

首先,一段长为 \(L\) 的回文串能够贡献 \(\lfloor\frac{L}{2}\rfloor\) 对相等关系。由于相等关系至少需要有 \(n-1\) 对,所以给定的 \(A\) 数组中至多有两个奇数,否则无解。

将这两个奇数放到开头和结尾,并构造 \(B:=[A_1-1,A_2,\dots,A_{M-1},A_M+1]\)。注意特判 \(M=1\) 和 \(A_1=1\) 的情况。

E - BBQ Hard

现在已经成为套路了。

答案就是

\[\sum_{1\le i<j\le N} \binom{A_i+A_j+B_i+B_j}{A_i+A_j}. \]

假如固定 \(i,j\),那么这个组合数可以描述为从 \((-A_i,-B_i)\) 走到 \((A_j,B_j)\),每次只能向上或向右走的方案数。

由于值域很小,所以可以统一进行一次 DP。时间复杂度 \(O(N+V^2)\)。

F - Wide Swap

考虑 \(P\) 的逆排列 \(Q=P^{-1}\),在 \(Q\) 上,操作可以描述为每次交换相邻的两个差 \(\ge K\) 的元素。

考虑一对 \(i,j\) 满足 \(i<j\) 且 \(|Q_i-Q_j|<K\),那么 \(Q_i\) 在任意时刻都一定在 \(Q_j\) 前面。并且只要对于任意 \(i,j\) 均满足这个条件,这样的 \(Q\) 就是能得到的。

根据这个条件可以建出一张 DAG,我们需要最小化这个 DAG 的一个拓扑序 \(p\) 的逆 \(p^{-1}\)。根据一个结论:

在一张 DAG 上,一个字典序最大的拓扑序 \(p\),其逆 \(p^{-1}\) 也是字典序最大的。

所以只需要在反图上求最大拓扑序 \(p\),然后 \(\operatorname{reverse}(p^{-1})\) 就是答案。

唯一的问题就是这张图有 \(O(N^2)\) 条边。但这也是容易的:考虑从 \(Q_i\) 连出去的边,也就是所有的 \(j<i\) 满足 \(Q_j\in (Q_i-k,Q_i+k)\)。只需要向其中 \(Q_j<Q_i\) 的最大 \(j\),以及 \(Q_j>Q_i\) 的最大 \(j\) 连边即可。

时间复杂度 \(O(N\log N)\)。

标签:lfloor,AtCoder,DAG,最大,奇数,拓扑,Contest,001,答案
From: https://www.cnblogs.com/alan-zhao-2007/p/17897460.html

相关文章

  • selenium运行时的ValueError: Timeout value connect was <object object at 0x000001
    fromseleniumimportwebdriverdriver=webdriver.Chrome()driver.get("https://www.baidu.com/")运行时出现ValueError:Timeoutvalueconnectwas<objectobjectat0x000001FE483C4170>错误大概率原因是:selenium和urllib3库的版本冲突导致修改版本为:selenium=3.1......
  • AtCoder Regular Contest 169
    A-PleaseSign某个\(A_i\)对\(A_1\)的贡献是\(\binom{10^{100}}{\mathrm{dep}_i}\),所以深度为\(d\)的节点的\(A_i\)之和只要不为\(0\),其贡献就一定远大于深度\(<d\)的所有点的贡献之和。从大到小找到第一个和非零的深度即可。B-SubsegmentswithSmallSums直......
  • 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,那么青木赢得了这局。高桥和青木之间的胜负关系是谁赢的局......