[ABC228-G] Digits on Grid

⇒\Rightarrow⇒原题链接

可以发现行数和列数相当小,可以将其中一维状压,同时因为奇数步和偶数步的操作很类似,只需要考虑其中一种就行了,这里考虑奇数步。

设 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

⇒\Rightarrow⇒原题链接

容易想到二分,然后 check\verb|check|check 的时候显然要选择编号连续的一段,保持中间的不动,然后两头往中间靠就行了。

[ABC230-G] GCD Permutation

⇒\Rightarrow⇒原题链接

可以先写一下题目要求的式子:
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∑n​j=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∑n​j=i∑n​d∣(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∑n​g=1∑n​μ~​(d)μ~​(g)i=1∑n​j=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∑n​g=1∑n​μ~​(d)μ~​(g)2f(d,g)[f(d,g)+1]​

μ~(n)≠0\tilde\mu(n)\ne 0μ~​(n)​=0 位置不多,将这些位置都找出来。

[ABC225-F] String Cards

⇒\Rightarrow⇒原题链接

写了一堆假做法。

首先将字符串排序,使其满足对于任意一组 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

⇒\Rightarrow⇒原题链接

首先可以转化一下题意:ANS=(∑i,jAi,j)−不选择的位置−C×横线数\mathrm{ANS}=\left(\sum_{i,j} A_{i,j}\right)-\text{不选择的位置}-C\times 横线数ANS=(∑i,j​Ai,j​)−不选择的位置−C×横线数 。我们要最小化这两个减去的数,可以考虑用最小割。

有两种选择:

  1. 不选择这个数。
  2. 选择这个数,尝试和左上角和右上角连接起来,对于其中一个方向,如果不能连接,就加上 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)C​T(i,j)0​T,(i,j)C​(i−1,j−1)​

[USACO21OPEN] Balanced Subsets P

⇒\Rightarrow⇒原题链接

容易想到一个 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+1​​f(i,j)​f(i,j)+1si+1​∈[’a’,’z’]​f(i,j)​

答案显然为 f(∣s∣,∣t∣)f(|s|,|t|)f(∣s∣,∣t∣)

刷(shui)题记录 2021.12相关推荐

  1. 图论刷水题记录(二)(最短路-----SPFA算法)

    继第一篇的后续,又来刷水题了,写的是SPFA算法,这个算法的复杂度比较玄学,感觉能不用就不用了,但是他的好处就是可以判断负圈. 3月26日: 1.POJ 1847 Tram 题意:在一个交通网络上有N ...

  2. 算法刷题记录(Day 12)

    Surprising Strings(poj 3096) 原题链接 解题思路:对于每一个D-pair的D值,生成相应的组,并存放在set中,若发现重复,则直接退出,否则代表成功. #include&l ...

  3. leetcode刷题记录2021年3月22日

    977. 有序数组的平方 这题比较简单,不过也是有不同的思路去做的,事件原因,我只写了两种思路,别的有时间再补充. 题目 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的 ...

  4. 图论刷水题记录(一)(最短路-----dijkstra算法)

    最近实在不知道干些什么,感觉自己除了水题什么都不会做,算了去刷一刷图论的水题吧本来想合起来一起发,想了想太长的话以后看起来也不方便,题目所以今天晚上就先发了dij部分,由上到下由易变难. 1.POJ ...

  5. 2021中石油程序设计平台新生热身赛10-挨打记录2021/12/7

    Alice在数学课上新学了结合律这个名字.对于每个非空集合S,我们可以定义集合上的一个运算×,使得对于集合中的任意元素x,y,都有x × y∈S.比如当S={0,1}时,AND,OR,XOR,都是一种 ...

  6. Java学习日报 — 问题记录 — 2021/12/14

    1.出现问题:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 分析:出现没有找到mapp ...

  7. [SWPUCTF] 2021新生赛之Crypto篇刷题记录(11)

    [SWPUCTF] 2021新生赛之Crypto篇刷题记录① [SWPUCTF 2021 新生赛]crypto6 [SWPUCTF 2021 新生赛]ez_caesar [SWPUCTF 2021 新 ...

  8. LeetCode刷题记录12——232. Implement Queue using Stacks(easy)

    LeetCode刷题记录12--232. Implement Queue using Stacks(easy) 目录 LeetCode刷题记录12--232. Implement Queue usin ...

  9. 重走长征路---OI每周刷题记录---4月12日 2015

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

最新文章

  1. echo等追加到文件末尾
  2. Knowledge Graph Alignment Network with Gated Multi-Hop Neighborhood Aggregation-学习笔记
  3. docker --- 梳理 Dockerfile docker-compose.yml
  4. 当你死后尸体如何处理?两种新玩法了解一下!
  5. catalog英文翻译_“目录”的英文翻译是“catalogquot;还是quot;contentsquot;
  6. python找出只出现一次的数字_【LeetCode 136】只出现一次的数字(Python)
  7. matlab 可变参数与默认参数设置
  8. Mysql的key_len计算方法
  9. 20155209 林虹宇 Exp3 免杀原理与实践
  10. mysql8下的密码过期问题以及navicat登录mysql报错的问题
  11. 删除链表的倒数第K个结点
  12. 【SAP Abap】SAP Eclipse ADT开发环境配置与应用
  13. Multisim14仿真基本模拟电路之10.4.2 RC 正弦波振荡器的仿真实验与分析
  14. 自学C语言和C++,有什么好书推荐?
  15. 基于Stacey模型的变革小招式:强有力的提议
  16. web端第三方微信登录
  17. NOI2022联合省选 题解
  18. canvas实现pc端画板
  19. 计算机系统的四种启动方式是,详解电脑为何有四种不同的启动设备教程
  20. 微信是怎样炼成的 微信产品的发展历程

热门文章

  1. Qt QSet 详解:从底层原理到高级用法
  2. linux系统如何下游戏,海岛纪元干货 在Linux系统下如何畅玩游戏攻略
  3. VUE3中使用proj4,实现坐标投影转换
  4. 输入一个包含若干数据的列表,先将列表中的数由小到大进行排序,然后将值为负数的元素进行平方运算
  5. 四步轻松实现用Visio画UML类图
  6. Android开源项目 个性化控件(View)
  7. 环信IM即时通讯集成-遇到问题及创建默认会话+默认欢迎语
  8. C# 使用反射获取私有属性的方法
  9. java高级过滤器、baseServlet、log4j配置使用poi实现excel导入数据库
  10. 揭秘广告软文的五种写法