首页 > 其他分享 >ARC171 B~E 四个数数

ARC171 B~E 四个数数

时间:2024-02-18 15:55:58浏览次数:30  
标签:atcoder 数数 arc171 ARC171 jp 操作 四个 考虑 contests

A 比较简单就不放了,这样刚好是全是数数题
F 先咕咕咕一会。

B

link
其实就是对于所有 \(P_i>i\) 的 \(i\) 到 \(P_i\) 连边,然后 \(A_i\) 就是 \(i\) 号点在的链上的最后一个点。
考虑集合 \(S_i=\{j\mid A_j=i\}\),显然如果需要有解那么 \(S_i\) 中最大值必定为 \(i\),而且这些点一定从小到大连成一条链,然后 \(P_i<i\) 不会连边。
由于 \(P\) 是一个排列,所以此时 \(P_i\) 一定是另外一个集合里面最小的一个元素。
令所有 \(A_i=i\) 的 \(i\) 从小到大排序依次为 \(c_1,c_2,\dots,c_m\),\(p_{c_i}\) 能取到的合法的个数为 \(d_i\)。
对于 \(i\le j\),我们注意到 \(d_i\le d_j\) 并且这 \(d_j\) 个数是严格包含 \(d_i\) 个数字的。
考虑乘法原理,显然需要从限制更加严格的开始考虑,那么答案就是 \(\prod(d_i-i+1)\)。
实际上 \(d_i\) 只需要开个桶扫一遍就能得到了。
\(O(n)\)
https://atcoder.jp/contests/arc171/submissions/50008176

C

link
引理1:两次操作的边集不同,那么最后得到的 \(a\) 不同。
证明:对于任意一条边,考虑断掉这条边,构成的两个点集上 \(a\) 组成的集合。注意到只有在对这条边操作时两边的集合会改变,所以两个方案中有一条边操作了另外一条边没有操作那么最后的 \(a\) 一定不同。
引理2:对于两次操作,如果操作的边集相同,如果对于任意点,当且仅当与这个点相连的所有操作过的边的相对顺序都相同,这两次操作得到的 \(a\) 是一样的。
证明:考虑归纳法。如果操作仅有一条边或者没有操作显然成立。考虑新增一个边 \((u,v)\),这条边与不和 \(u,v\) 两点相连的边的出现顺序对答案没有影响,与 \(u,v\) 两点相连的边出现顺序一定有影响,得证。

根据上面的引理,假设与 \(u\) 相连的点有 \(deg_u\) 被操作,那么答案就是 \(\prod(deg_u!)\)。
设 \(g_{u,0/1}\) 为 \(u\) 这个子树与父亲相连的边没有操作/操作的方案数。
对于每次转移设 \(f_{i,j}\) 为 \(i\) 这个子树目前 \(j\) 个儿子向它连边的方案数。
使用 \(O(n^2)\) 树形 DP 即可。答案显然是 \(g_{root,0}\)。
https://atcoder.jp/contests/arc171/tasks/arc171_c

D

link
注意到 \(P\) 是质数,所以 \(\operatorname{hash}(A_l,A_{l+1},\cdots,A_r)\not=0\) 等价于 \(\operatorname{hash}(A_l,A_{l+1},\cdots,A_n)\not=\operatorname{hash}(A_r+1,A_{r+2},\cdots,A_n)\)。
每个后缀看成一个点,要求不相同的两两连边,就变成 \(N+1\) 个点(注意空后缀)染 \(P\) 种颜色要求每条边相邻的点颜色不同。
状压,先算出每个点集是不是独立集,为了方便记 \(g(S)=[\texttt{点集} S \texttt{是独立集}]\),\(f(S)}\) 为给集合 \(S\) 的元素染色需要最少的颜色数量。显然 \(f(\varnothing)=0\)。

\[f(S)=\min_{g(T)=1,T\subset S}\{f(S\setminus T)+1\} \]

\(O(3^n)\)。
https://atcoder.jp/contests/arc171/submissions/50404418

E

link
考虑观察样例研究一下这个性质。

注意到每次一定是横着跳竖着条循环往复然后回到原来的位置。所以 \(M\) 为奇数无解。
发现横着或者竖着跳不会互相影响,所以分开考虑最后乘起来再 \(\times 2\) 就是答案(第一次可以横着也可以竖着)。
考虑横着跳。
发现每次横着跳都会占用两个相邻的列。
由于起点是给定的,如果最后是从左边过来,那么起点应该在两个相邻的列中的左边,否则是右边。
我们注意到只有最后一次并不是任意选的。我们设最后一次可以从 \(i\) 个位置过来,那么如果圈定了列之后,总共有 \((m/2-2)!\times i\) 种方案。
考虑确定这 \(2m\) 列。除了起点所在的两个列需要分类讨论,其余的直接用捆绑法计算即可。
https://atcoder.jp/contests/arc171/submissions/50409834

标签:atcoder,数数,arc171,ARC171,jp,操作,四个,考虑,contests
From: https://www.cnblogs.com/jiangtaizhe001/p/18019314

相关文章

  • TO B企业如何通过四个步骤构建高效的 PLG销售体系
    在当今以客户为中心的市场环境中,产品引导增长(Product-LedGrowth,PLG)模式对于TOB企业而言,不仅是一种趋势,更是实现可持续增长的关键策略。构建有效的PLG销售体系需要整合多个关键部分:客户成功团队、运营团队、数据支撑团队以及绩效体系。本文旨在为TOB企业的高管和销售负责......
  • [ARC171E] Rookhopper's Tour 题解
    题目链接首先把\(m=2\)和\(m\)为奇数的情况判掉,由于我们要对合法的摆放方案计数,而一个摆放方案要判断合法性就必须通过一组合法的移动过程,对移动的状态进行记录以此转移和优化显然没啥前途,因此我们考虑摆放方案和移动过程之间的联系。一个比较显然的观察是摆放方案和移动过......
  • ARC171 - sol
    感觉难度并不大,但是就是做不起,呜呜呜。中等题练少了是这样的。AtCoderRegularContest171-AtCoderA-NoAttackingThereisachessboardwith\(N\)rowsand\(N\)columns.Let\((i,j)\)denotethesquareatthe\(i\)-throwfromthetopandthe\(j\)-thco......
  • react引用async异步函数数据渲染
    当需要在React组件中引用异步函数获取的数据时,可以使用useState钩子来存储数据,并在组件渲染时进行处理。下面是一个示例,展示了如何在React中引用异步函数的数据并进行渲染:importReact,{useState,useEffect}from'react';functionMyComponent(){const[data,......
  • [ARC171] A~D 题解
    [ARC171]A~D题解A.NoAttacking最优策略是车隔行放,分讨一下就可以了。if(n<a)cout<<"No\n";else{if(a*2<n)b-=(a+1)*(n-a);else{b-=(n-a)*(n-a);if(b<=0)cout<<"Yes\n";......
  • css实现 背景重复线条 实现盒子四个角发光效果 实现内阴影加边框发光效果
     背景重复线条 width:100%;height:100%;//background-color:rgba(51,73,102,1);background-image:linear-gradient(toleft,#3349660.02rem,transparent0.01rem);background-repeat......
  • 题解 ARC171D【Rolling Hash】
    来补题了。昨天赛时想法是对的,代码写错了,没调过太可惜了。显然\(P>n\)时必定有解。设前缀\([1,i]\)的哈希值为\(s_i\),显然\([l,r]\)的哈希值不为\(0\)的充要条件是\(s_{l-1}\nes_r\)。建立一个点的编号为\(0\simn\)的图,对于每个输入的区间\([l,r]\),连接一条边......
  • 题解 ARC171C【Swap on Tree】
    每棵子树内只可能有至多一个外来的数,且外来的数是多少并不影响方案数,因此考虑设\(f_{u,i,0/1}\)表示考虑以\(u\)为根的子树,与\(u\)相连的所有边中断了\(i\)条,且\(u\)与其父亲之间的边有没有断的方案数。设\(g_{u,c}=\sumf_{u,i,c}\)。每个节点的初始状态是\(f_{u,0,......
  • 题解 ARC171B【Chmax】
    考察题面中的操作究竟做了什么,不难发现其实是将所有满足\(P_i>i\)的\(i\toP_i\)连边,得到若干条链,然后\(B_i\)即为\(i\)所在链的最后一个节点。显然,存在\(A_i<i\)时无解,存在\(A_i\nei\)但\(A_j=i\)时也无解。否则,每个\(A_i\nei\)的位置填的数都唯一确定......
  • [ARC171B] Chmax
    [ARC171B]ChmaxSolution首先可以发现相同\(a_{i}\)的元素可以形成一条链。问题很容易转化为:给定若干线段\([l_{i},r_{i}]\),要求\(i\)能连向\(j\)当且仅当\(l_{j}<r_{i}\),求生成环集的数量。容易发现两个点之间至少有一条边,当且仅当两线段不交时,左侧线段无法连向右......