难度从 \(1\sim10\) 分类,越小越简单。
CF1100D
算法难度:2 实现难度:3 思维难度:7
具体思路:
这个数据范围很奇怪,而且,这东西很人类智慧。
具体而言,先把王挪到棋盘正中间,然后将棋盘分为了 \(4\) 块,我们发现至少有三块加起来比 \(499\) 大,所以找到这个位置并不停的斜着走就好了。
有一个实现细节,如果斜线上的位置有一个车,那么可以先往下走一步,这样车必然挪开,所以还是合法的。
容易证明上述思路移动步数小于 \(2000\)。
那么,如何想到这个思路呢?我也不知道
\(\\\)
[WC2011]最大XOR和路径
算法难度:5 实现难度:3 思维难度:6
具体思路:
我们发现任意的环与一条 \(1\) 到 \(n\) 的链异或起来能组成所有可能的路径。
如何求出所有的环?暴力枚举肯定不行,会被卡成 \(n^2\)。
又发现先建出生成树,然后任意环必然能通过若干树边加一条非树边来凑出来。
如果 \(1\) 到 \(n\) 的链有多条怎么办?
任选一条即可,因为多条 \(1\) 到 \(n\) 的路径又能组成一个环。
其实,思路挺巧妙的。
\(\\\)
CF1245F
算法难度:3 实现难度:3 思维难度:4
具体思路:
思路很一眼,如果二进制下某一位有进位则这个式子必然不合法,然后直接数位 dp 就好了。
\(\\\)
CF1712E2
算法难度:4 实现难度:3 思维难度:4
具体思路:
正难则反,转化成 \(lcm(i,j,k)\le i+j+k\),然后有两种情况分讨。
一种是 \(lcm(i,j,k)=k\),这种就直接拆因数做。
一种是 \(lcm(i,j,k)=2\times k\) 且 \(i+j\ge k\),此时只有两种情况满足,即 \((3,4,6)\) 和 \((6,10,15)\) 以及它们的倍数。
然后直接扫描线做就行了。
\(\\\)
CF1801D
算法难度:3 实现难度:3 思维难度:4
具体思路:
场切的 div1+2 中 div2 的 \(F\),思路比较简单。
先惰性的演出,也就是说,当钱不够时再演出。
而贪心一下,如果要演出必然在演出路上经过的能得到最多钱的点演出。
于是我们就能列出一个 dp 方程,具体而言,\(dp_{i,j,k}\) 代表现在在第 \(i\) 个节点,路上经过的 \(w_i\) 最大的点是 \(j\),手里有 \(k\) 块钱,最少需要买多少次。
当然,这个东西复杂度肯定崩了,我们发现 \(k\) 这个东西太大了,考虑优化。
因为演出是惰性的,所以我们可以把 \(k\) 作为第二关键字塞进 dp 里头。
那这样为什么是对的呢?
感性理解一下,如果演出次数少了一次,那么我们再在 \(j\) 这个位置上买一次,演出次数就相等,而手里的钱必然会更多。
然后直接用最短路优化 dp 就行。
\(\\\)
一个题
算法难度:3 实现难度:3 思维难度:6
大致题意:
给一个矩阵,如果相邻两个格子值相同则有边,每次询问一个子矩阵内有多少个连通块,如果两个格子在子矩阵外联通了也算一个。
具体思路:
对于每种联通的值,我们先随便选择一个领头人,查询的时候用二维前缀和求出子矩阵内有多少个领头人。
如果领头人不在子矩阵内,但是却算进了答案,当且仅当这种颜色经过了子矩阵边缘,直接扫过去就行了。
很神奇的思路。
\(\\\)
CF878D
算法难度:4 实现难度:2 思维难度:8
具体思路:
虽然我们只需要求这个数具体是多少,但是还可以二分答案,找到 \(mid\) 之后将小于设为 \(0\) 大于等于设为 \(1\),取 max 就相当于二进制或,取 min 就是二进制与。
然后就可以 bitset 优化了。
虽然是套路,但感觉这个套路还是很神仙。
\(\\\)
2022/3/18
一个题
算法难度:5 实现难度:6 思维难度:6
大致题意:
给两颗树,问有多少个集合满足这些点在第一棵树中是联通块,第二棵树中是一条链。
具体思路:
有个套路,如果点的个数减去边的个数恰好为 \(1\),则这是一个联通块。
然后对于第一棵树中的一条边,如果在第二棵树包含它,那么起点和终点必然都是一个区间,点同理。
所以相当于矩阵加,问有多少个 \(1\),直接二维扫描线就行。
标签:记录,矩阵,算法,具体,dp,一些,思路,难度 From: https://www.cnblogs.com/duck-pear/p/17230535.html