刷(shui)题记录 2021.12
[ABC228-G] Digits on Grid
可以发现行数和列数相当小,可以将其中一维状压,同时因为奇数步和偶数步的操作很类似,只需要考虑其中一种就行了,这里考虑奇数步。
设 f(S)f(S)f(S) 表示当前位置所在的行的集合为 SSS 的方案数,接下来我们需要计算出 g(S)g(S)g(S) ,其意义是所在的列的集合为 SSS 的方案数,这时候我们从 f(S)f(S)f(S) 中找一个数字 aaa 拓展,其能到达的行的集合为 D(S,a)D(S,a)D(S,a) ,那么可以得到转移:
g(D(S,a))←f(S)g(D(S,a))\leftarrow f(S) g(D(S,a))←f(S)
这个 D(S,a)D(S,a)D(S,a) 可以使用 D(S,a)={j∣i∈S,ai,j=a}D(S,a)=\{j\mid i\in S, a_{i,j}=a\}D(S,a)={j∣i∈S,ai,j=a} 得到。
初始条件显然是 f({1,2,3,…,h})=1f(\{1,2,3,\dots, h\}) = 1f({1,2,3,…,h})=1
[ABC229-G] Longest Y
容易想到二分,然后 check\verb|check|check 的时候显然要选择编号连续的一段,保持中间的不动,然后两头往中间靠就行了。
[ABC230-G] GCD Permutation
可以先写一下题目要求的式子:
ANS=∑i=1n∑j=in[(i,j)>1∧(pi,pj)>1]\mathrm{ANS}= \sum_{i=1}^n \sum_{j=i}^n \left[(i,j)> 1 \land \left(p_i,p_j\right)> 1\right] ANS=i=1∑nj=i∑n[(i,j)>1∧(pi,pj)>1]
对于形如 [n>1][n>1][n>1] 的判断式,可以使用莫比乌斯函数的性质:∑d∣nμ~(d)=[n>1]\sum_{d|n} \tilde\mu(d)=[n>1]∑d∣nμ~(d)=[n>1] 展开。注意,这个 μ~(n)=−μ(n)\tilde\mu(n)=-\mu(n)μ~(n)=−μ(n) 。由于原题的条件式是 and\verb|and|and ,因此可以直接将两个求和乘起来。
变化一下:
ANS=∑i=1n∑j=in∑d∣(i,j)∑g∣(pi,pj)μ~(d)μ~(g)\mathrm{ANS}= \sum_{i=1}^n \sum_{j=i}^n \sum_{d|(i,j)} \sum_{g|\left(p_i,p_j\right)} \tilde\mu(d) \tilde\mu(g) ANS=i=1∑nj=i∑nd∣(i,j)∑g∣(pi,pj)∑μ~(d)μ~(g)
按照化式子的套路,可以将 d,gd,gd,g 放到前面去:
ANS=∑d=1n∑g=1nμ~(d)μ~(g)∑i=1n∑j=in[d∣i∧d∣j∧g∣pi∧g∣pj]\mathrm{ANS}= \sum_{d=1}^n \sum_{g=1}^n \tilde\mu(d) \tilde\mu(g) \sum_{i=1}^n \sum_{j=i}^n [d|i~\land~d|j~\land~g|p_i~\land~g|p_j] ANS=d=1∑ng=1∑nμ~(d)μ~(g)i=1∑nj=i∑n[d∣i ∧ d∣j ∧ g∣pi ∧ g∣pj]
后面两个 Σ\SigmaΣ 可以看成是一个关于 d,gd,gd,g 的函数,但是因为 d,gd,gd,g 对 i,ji,ji,j 的限制其实是一样的,因此设 f(d,g)=∑i=1n[d∣i∧g∣pi]f(d,g)=\sum_{i=1}^n [d|i~\land~g|p_i]f(d,g)=∑i=1n[d∣i ∧ g∣pi] ,那么式子就变成了:
ANS=∑d=1n∑g=1nμ~(d)μ~(g)f(d,g)[f(d,g)+1]2\mathrm{ANS}=\sum_{d=1}^n \sum_{g=1}^n \tilde\mu(d) \tilde\mu(g) \frac{f(d,g)[f(d,g)+1]}{2} ANS=d=1∑ng=1∑nμ~(d)μ~(g)2f(d,g)[f(d,g)+1]
μ~(n)≠0\tilde\mu(n)\ne 0μ~(n)=0 位置不多,将这些位置都找出来。
[ABC225-F] String Cards
写了一堆假做法。
首先将字符串排序,使其满足对于任意一组 1≤i<j≤N1\leq i < j\leq N1≤i<j≤N ,满足 Si+Sj<Sj+SiS_i+S_j< S_j+S_iSi+Sj<Sj+Si 。然后倒着 dpdpdp ,设 f(i,j)f(i,j)f(i,j) 表示考虑了第 iii 到 nnn 个,选择了 jjj 个的最小字符串,显然有转移:
f(i,j)=min{f(i+1,j),Si+f(i+1,j−1)}f(i,j)=\min\{f(i+1,j),S_i + f(i+1,j-1)\} f(i,j)=min{f(i+1,j),Si+f(i+1,j−1)}
[ABC225-G] X
首先可以转化一下题意:ANS=(∑i,jAi,j)−不选择的位置−C×横线数\mathrm{ANS}=\left(\sum_{i,j} A_{i,j}\right)-\text{不选择的位置}-C\times 横线数ANS=(∑i,jAi,j)−不选择的位置−C×横线数 。我们要最小化这两个减去的数,可以考虑用最小割。
有两种选择:
- 不选择这个数。
- 选择这个数,尝试和左上角和右上角连接起来,对于其中一个方向,如果不能连接,就加上 CCC 。
对于第一种选择,可以这样搞:
∀1≤i≤H,1≤j≤W,S→Ai,j(i,j)\forall ~1\leq i\leq H, 1\leq j\leq W,~S\xrightarrow{A_{i,j}} (i,j) ∀ 1≤i≤H,1≤j≤W, SAi,j(i,j)
对于第二种,以左上为例:
∀1≤j≤W,(1,i)→CT∀1<i≤H,1≤j≤W,(i,j)→0T,(i,j)→C(i−1,j−1)\begin{aligned} \forall~ 1\leq j\leq W, ~&(1,i)\xrightarrow{C} T\\ \forall~ 1<i\leq H, 1\leq j\leq W, ~&(i,j)\xrightarrow{0} T, (i,j)\xrightarrow{C} (i-1,j-1) \end{aligned} ∀ 1≤j≤W, ∀ 1<i≤H,1≤j≤W, (1,i)CT(i,j)0T,(i,j)C(i−1,j−1)
[USACO21OPEN] Balanced Subsets P
容易想到一个 O(n5)O(n^5)O(n5) 的 dp\verb|dp|dp 。设 f(i,l,r,0/1,0/1)f(i,l,r,0/1, 0/1)f(i,l,r,0/1,0/1) 表示当前考虑到第 iii 行,第 iii 行选择了区间 [l,r][l,r][l,r] ,第 iii 行的左端点为递减/递增状态,右端点为递增/递减状态的方案数,转移显然。可以发现可以用二维前缀和优化成 O(n3)O(n^3)O(n3) 。代码非常令人烦躁。
[CF-1366F] Jog Around The Graph
⇒luogu\Rightarrow \rm luogu⇒luogu 链接
分情况讨论。
对于路径长度小于等于 mmm 的,可以使用 dp\verb|dp|dp 求出答案:设 f(i,j)f(i,j)f(i,j) 表示走了 iii 步,到达节点 jjj 的最长长度,转移显然,这里令不能到达的 f(i,j)=−∞f(i,j)=-\inftyf(i,j)=−∞ 。
对于路径长度大于等于 mmm 的答案,设长度为 lll,这时候路径一定不是简单路径。思考一下性质可以发现,答案的方案一定是走到某一边的一端之后,剩余都是在这条边上来回走动,换而言之,答案一定是形如 we(l−m)+f(m,ue/ve)w_e(l-m)+f(m,u_e/v_e)we(l−m)+f(m,ue/ve) 的。这个东西很明显是一个直线的形式,但是由于坐标范围过大,不能用李超树。将其转化为维护凸包的一半,然后对于凸包上的每一个点都求出贡献。
[CF-1366G] Construct the String
⇒luogu\Rightarrow \rm luogu⇒luogu 链接
容易想到用 dp\verb|dp|dp 解决,设 f(i,j)f(i,j)f(i,j) 表示用 s1…is_{1\dots i}s1…i 匹配 t1…jt_{1\dots j}t1…j 的最小花费。关键在转移,容易想到删除和匹配一个字符的转移,但是原串中的 '.'\verb|'.'|’.’ 带来的撤回操作并不是那么好处理。但是我们可以将撤回操作和被撤回字符一起处理。具体而言,对于一个位置 iii ,若下一个位置是一个小写字符,其被撤回的操作显然是满足 ∑j=ik∣sj='.'∣=∑j=ik∣sj∈['a','z']∣\sum_{j=i}^k |s_j = \verb|'.'||=\sum_{j=i}^k \left|s_j \in [\verb|'a'|, \verb|'z'|]\right|∑j=ik∣sj=’.’∣=∑j=ik∣sj∈[’a’,’z’]∣ 的第一个 kkk ,设其为 nxti\mathrm{nxt}_inxti 。
那么可以得到转移:
f(i+1,j+1)←si+1=tj+1f(i,j)f(i+1,j)←f(i,j)+1f(nxti+1,j)←si+1∈['a','z']f(i,j)\begin{aligned} f(i+1,j+1) &\xleftarrow{s_{i+1}=t_{j+1}} f(i,j)\\ f(i+1,j) &\xleftarrow{} f(i,j)+1\\ f(\mathrm{nxt}_{i+1}, j) &\xleftarrow{ s_{i+1} \in [\verb|'a'|, \verb|'z'|]} f(i,j) \end{aligned} f(i+1,j+1)f(i+1,j)f(nxti+1,j)si+1=tj+1f(i,j)f(i,j)+1si+1∈[’a’,’z’]f(i,j)
答案显然为 f(∣s∣,∣t∣)f(|s|,|t|)f(∣s∣,∣t∣)
刷(shui)题记录 2021.12相关推荐
- 图论刷水题记录(二)(最短路-----SPFA算法)
继第一篇的后续,又来刷水题了,写的是SPFA算法,这个算法的复杂度比较玄学,感觉能不用就不用了,但是他的好处就是可以判断负圈. 3月26日: 1.POJ 1847 Tram 题意:在一个交通网络上有N ...
- 算法刷题记录(Day 12)
Surprising Strings(poj 3096) 原题链接 解题思路:对于每一个D-pair的D值,生成相应的组,并存放在set中,若发现重复,则直接退出,否则代表成功. #include&l ...
- leetcode刷题记录2021年3月22日
977. 有序数组的平方 这题比较简单,不过也是有不同的思路去做的,事件原因,我只写了两种思路,别的有时间再补充. 题目 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的 ...
- 图论刷水题记录(一)(最短路-----dijkstra算法)
最近实在不知道干些什么,感觉自己除了水题什么都不会做,算了去刷一刷图论的水题吧本来想合起来一起发,想了想太长的话以后看起来也不方便,题目所以今天晚上就先发了dij部分,由上到下由易变难. 1.POJ ...
- 2021中石油程序设计平台新生热身赛10-挨打记录2021/12/7
Alice在数学课上新学了结合律这个名字.对于每个非空集合S,我们可以定义集合上的一个运算×,使得对于集合中的任意元素x,y,都有x × y∈S.比如当S={0,1}时,AND,OR,XOR,都是一种 ...
- Java学习日报 — 问题记录 — 2021/12/14
1.出现问题:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 分析:出现没有找到mapp ...
- [SWPUCTF] 2021新生赛之Crypto篇刷题记录(11)
[SWPUCTF] 2021新生赛之Crypto篇刷题记录① [SWPUCTF 2021 新生赛]crypto6 [SWPUCTF 2021 新生赛]ez_caesar [SWPUCTF 2021 新 ...
- LeetCode刷题记录12——232. Implement Queue using Stacks(easy)
LeetCode刷题记录12--232. Implement Queue using Stacks(easy) 目录 LeetCode刷题记录12--232. Implement Queue usin ...
- 重走长征路---OI每周刷题记录---4月12日 2015
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
最新文章
- echo等追加到文件末尾
- Knowledge Graph Alignment Network with Gated Multi-Hop Neighborhood Aggregation-学习笔记
- docker --- 梳理 Dockerfile docker-compose.yml
- 当你死后尸体如何处理?两种新玩法了解一下!
- catalog英文翻译_“目录”的英文翻译是“catalogquot;还是quot;contentsquot;
- python找出只出现一次的数字_【LeetCode 136】只出现一次的数字(Python)
- matlab 可变参数与默认参数设置
- Mysql的key_len计算方法
- 20155209 林虹宇 Exp3 免杀原理与实践
- mysql8下的密码过期问题以及navicat登录mysql报错的问题
- 删除链表的倒数第K个结点
- 【SAP Abap】SAP Eclipse ADT开发环境配置与应用
- Multisim14仿真基本模拟电路之10.4.2 RC 正弦波振荡器的仿真实验与分析
- 自学C语言和C++,有什么好书推荐?
- 基于Stacey模型的变革小招式:强有力的提议
- web端第三方微信登录
- NOI2022联合省选 题解
- canvas实现pc端画板
- 计算机系统的四种启动方式是,详解电脑为何有四种不同的启动设备教程
- 微信是怎样炼成的 微信产品的发展历程
热门文章
- Qt QSet 详解:从底层原理到高级用法
- linux系统如何下游戏,海岛纪元干货 在Linux系统下如何畅玩游戏攻略
- VUE3中使用proj4,实现坐标投影转换
- 输入一个包含若干数据的列表,先将列表中的数由小到大进行排序,然后将值为负数的元素进行平方运算
- 四步轻松实现用Visio画UML类图
- Android开源项目 个性化控件(View)
- 环信IM即时通讯集成-遇到问题及创建默认会话+默认欢迎语
- C# 使用反射获取私有属性的方法
- java高级过滤器、baseServlet、log4j配置使用poi实现excel导入数据库
- 揭秘广告软文的五种写法