日记 2023.2.25:2023 syzx 春季训练 1

https://vjudge.csgrandeur.cn/contest/544563

 	A 	CodeForces 1491E 	斐波那契树
		B 	CodeForces 1622E 	期末考试
		C 	CodeForces 1606D 	红蓝矩阵
		D 	CodeForces 1586E 	加权
		E 	CodeForces 1633E 	生成树
		F 	CodeForces 1168A 	周而复始
		G 	CodeForces 1739E 	扫地机器人
		H 	CodeForces 1736C2 	序列II
		I 	CodeForces 1736C1 	序列I
		J 	CodeForces 1598F 	括号列
		K 	CodeForces 1606E 	打枪 

dsy 的题:维护序列,单点修改,区间查询乘积的莫比乌斯函数,十万。

如果区间内有人莫比乌斯函数是零,直接再见

对于 \(>\sqrt w\) 的质因子有且只有一个,所以维护 \(last\) 表示上一次出现这个质因子的地方,询问显然,修改用 set

对于 \(<\sqrt w\) 的,竟然只有 65 个,那么 bitset 暴力就是了,不对直接 unsigned long long 都行

A. CF1491E 斐波那契树

暴力。

考虑一棵树,最多有两个能切的边。经过一些归纳,得出两条边随便切一条就行。(反证一条能切一条不能切)

复杂度:递归 \(40\) 层,每层遍历满,\(O(n\log n)\)

https://codeforces.com/contest/1491/submission/194870422

B. CF1622E 期末考试

\(|a-b|=\max(a-b,b-a)\)

枚举每个学生高了还是低了,拆掉绝对值

用一个桶统计每个题得分对答案的影响,对着这个权值排序后从大到小给分值。

\(O(2^n(nm+m\log m))\) 大概是 \(10^3\times 10^5\)

https://codeforces.com/contest/1622/submission/194871124

C. CF1606D 红蓝矩阵

枚举 \(k\),将好多好多数字压缩成两个最值。

考虑如果是 \(n\) 个区间红蓝染色,假设蓝 < 红,那么按照 \(r\) 从小到大枚举加一个区间,动态维护一下剩下没选的(红)的最小值(后缀),然后比较一下,把所有合法方案存下来。

左右都搞完之后,要比较方案是不是一样的,简单的,异或哈希。

https://codeforces.com/contest/1606/submission/195229419

D. CF1586E

考虑树。简单路径固定,所以暴力一波。把每条边的两个端点加一的权值。

如果每个点的度数是偶数:

  • 树上查分:因为操作相当于 \(a,b\) 加一,边权保龄的条件是差分保龄,所以搞完了。
  • 欧拉回路:考虑这是一个欧拉回路,但是因为树上没有环,所以所谓回路就是对于一些边反复走,那一定有解了。

注意到这个结论和树的形态无关,那么连通图就搞一棵生成树就是了。有解就输出树上路径,无解就数一下多少个奇数度数。

https://codeforces.com/problemset/submission/1586/195230867

E. CF1633E

只有 \(O(m)\) 的生成树形态:一条边被抛弃后,以后就再也不用了。

假装我们有指针 \(q\),一开始 \(q=0\) 找出生成树,然后二分找下一次它发生改变的位置。\(O(m^2\log k)\)

或者枚举所有 \(|w_i-x|=|w_j-x|\) 的位置。

总之就是找出每个生成树的对应区间,然后直接查询。一定是连续的。

F. CF1168A

二分操作次数:每个数可以加最多 \(k\) 次。

贪心使得每一个数尽可能小。

https://codeforces.com/problemset/submission/1168/194870492

G

只会向右走

DP

H&I(没听)

J. CF1598F

每日折线

状压

考虑加入一个,二分找到他什么时候不合法,然后数一下有多少个零,通过维护每一个串的前缀和 min 和 mincnt 实现

记忆化搜索:如果不合法马上跑路

https://codeforces.com/problemset/submission/1598/194877011

K. CF1606E

\(f_{i,j}\) 表示 \(i\) 个人,血量上限是 \(j\)

枚举有 \(k\) 个人死掉,那么这些人血量 \(\leq i-1\),所以他们的血量的方案是好求(记得组合数),剩下了 \(f_{i-k,j-i+1}\)

算有胜者的方案数,则 \(0\leq k<i\),最终 \(f_{1,j}=j\)

https://codeforces.com/problemset/submission/1606/194872933

posted @ 2023-02-25 09:12  caijianhong  阅读(4)  评论(0编辑  收藏  举报