2024.10 做题记录 /

news/2024/10/6 16:24:39

CF2004E

套用 SG 函数的结论,我们先打单个游戏的表再异或即可得到答案。首先对于一个大小为 \(i\) 的堆有 \(SG[i]=\text{mex}_{j\bot i}\{SG[i-j]\}\),容易暴力 dp。

int SG[N];
int f(int x) {if(SG[x]!=-1) return SG[x];if(x==0) return SG[0]=0;vector<int> g;up(i,1,x) if(__gcd(i,x)==1) g.pb(f(x-i));sort(g.begin(),g.end());if(g[0]>0) return 0;up(i,0,(int)g.size()-2) if(g[i]+1!=g[i+1]&&g[i]!=g[i+1]) return g[i]+1;return g[g.size()-1]+1; 
}

首先 \(SG[0]=0,SG[1]=1\),然后第 \(i\) 个质数的 SG 值是 \(i\) 强相关的,合数的 SG 是最小质因子的 SG,线性筛求出即可。


CF2005E1/2

E1 的话直接按照博弈论的东西暴力 dp 即可,是 \(O(lnm)\) 的,具体而言对于一个位置考虑其子矩阵中代表这一轮的格子,如果不能到达必胜态就是必败,暴力 dp 即可,\(f[i][j][k]\) 表示 \((i,j)\) 往下的矩阵中第 \(k\) 轮的状态,注意定义是从 \((i,j)\) 走而不是走到 \((i,j)\),容易倒序 dp。

现在就要优化 dp 了,这个转移本身形式感觉没啥简便优化,找找题目性质,注意到如果一次转移可以走到多个点 \(x=p_1,\dots,p_x\),一定走一个右下方没有 \(x\) 的位置,因为如果走到下面都输那走上面一定会输但是走下面会赢的走上面不一定会赢(下一手选择被包含了),那有用的点按照横/纵坐标排序之后纵/横坐标会有单调性,这代表了按照横/纵坐标排序之后任意矩阵能覆盖到的合法点集是一个区间。那直接对每一轮记一下合法位置,对 \(f\) 做一个前缀和,查询的时候二分之后差分,判断一个子矩阵有没有胜态即可,复杂度 \(O(nm\log nm)\)


CF2005D

经典结论:序列上固定一个左端点之后向右拓展右端点,本质不同的 \(\gcd\) 至多只有 \(\log\) 种。因为后面的 \(\gcd\) 一定是前面的 \(\gcd\) 的因数,每次变化至少使得值 \(\times\frac{1}{2}\)

对于每一个点预处理出每一个作为左端点之后序列上的 \(\gcd\) 的段,一个段放在一起考虑,显然是拿最右边的不劣,因为左边的贡献一样的话,右边留下的数少更容易让后面部分的 \(\gcd\) 变大,设 \(L_{a/b}[i]\) 表示序列 \(a/b\)\(i\) 个数作为左端点的 \(\gcd\) 段的右端点集合,预处理可以递推,求答案暴力枚举即可,复杂度控制在几只 \(\log\) 呢。


CF2002E

按照连续的颜色的段考虑,在删出空段前是频繁的每次去头,删除空段之后如果该段左右段颜色相同则会导致合并,感觉容易拿数据结构维护。

维护当前删除减量 \(\Delta\),用 stl set(不熟练 set 可以写带删除标记的 priority_queue)维护二元组 \((x,y)\) 表示段 \(x\) 的长度是 \(y+\Delta\),以 \(y\) 为关键字排序。每次找出最先被删空的那一段,向前推进时间,更新一下用 stl map 维护一个前后指针即可。


CF2003 E2

首先先考虑往序列里面投一个数会得到什么,设序列中第一/二个没有出现的数为 \(L,R\),则投机 \(L\)\(R\),否则得到 \(L\)

先形式化描述一下,首先 \(L\to L\) 这种当成没有发生就行了,所以是我们可以选择 \(?\to R\) 或者 \(L\to R\)。碍于两种移动相互限制,先想办法找点性质,感觉第一类操作这个凭空变出某个数只用一次够了,那只连 \(L\to R\) 的边,可以发现因为只有小往大所以是 DAG 这很方便,设 \(f_i\) 表示从 \(i\) 走能到达的最大的点是什么,按 topu 序倒序 dp 即可。具体而言度数 \(>1\) 的点和 \(x\) 可以作为根,然后任意 \(L\) 可以作为答案,然后就是求出从任意根开始走能走到的最大点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/68355.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【CodeForces训练记录】Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round)

赛后反思 做红温了,太菜了,每题都需要WA几次才能过,B题看到 MEX 选择性害怕,时间复杂度又算错了 A题 每次选择一对 \(a_i,a_j\) 把均值插入数组最后面,要想结果最大,对于两个数求均值,最后的结果一定是小于等于其中的较大值,我们可以考虑如何最大化最后一次操作,想到将…

傻逼模拟赛搬的时候能不能看看题面改之后还是不是让人能看懂还有不发 checker 是有什么心事吗

如题。 傻逼模拟赛搬的时候能不能看看题面改之后还是不是让人能看懂还有不发 checker 是有什么心事吗还在最后一道题放集训队互测什么意思 什么叫有 \(b_{k}\) 种 \(k\) 类型的货币,同一种流通的货币不会超过二十种 什么叫接下来 \(n\) 个数表示 \(a_{1} \sim a_{n-1}\)upd:

Java - 10 二维数据

Java - 10 二维数据 一维数组的每个元素又是一个一维数组 静态初始化 int[][] arr = {{0,0,0,0},{1,1,1,1},{2,2,2,2},{3,3,3,3}};public class TwoDimensionArray {public static void main(String[] args) {int[][] arr = {{0,0,0,0},{1,1,1,1},{2,2,2,2},{3,3,3,3}};// 遍历…

Java - 11 类与对象

Java - 11 类与对象 类 类[属性, 行为] ->对象[属性, 行为] public class Test{public static void main(String[] args){Cat cat1 = new Cat(); // 创建对象cat1.name = "大宝";cat1.age = "3";cat1.color = "orange";System.out.println(ca…

20222413 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 在本周的学习过程中,我了解到了许多缓冲区溢出攻击的实际案例、缓冲区溢出攻击的原理和相关基础知识,包括GDB调试器的使用方法、反汇编、基础的汇编语言与指令等,重新温习了函数调用过程和进程管理方面的知识内容。并且通过实验一,我能够了解并熟练完成Linux系统…

函数的上下文

函数的上下文 概述 在函数体的语句中,会出现this这个词,this就是函数的上下文 函数中this是谁,就说明函数的上下文是谁 函数中的this是谁,要看是如何调用的,因为this不是一成不变的 比如我们看下面的例子 var obj = {a: 100,fun: function() {console.log(this.a);} };我们…

拥挤聚集智能监测系统

拥挤聚集智能监测系统可以通过对人员数量、密度等进行实时监测,拥挤聚集智能监测系统识别出拥挤聚集的情况,并及时发出预警。拥挤聚集智能监测系统可以通过对人员进车间的人数等进行监测,识别出是否存在人员拥堵、挤压等安全隐患,及时发出警报,提醒工作人员采取措施疏散人…

睡岗识别 AI助力企业安全管控

睡岗识别可以通过AI视频智能分析技术,睡岗识别识别出操作人员是否存在睡岗情况。例如,在变电站等场景中,睡岗识别技术可以通过对识别出操作人员是否存在睡岗情况,及时发出预警,避免因操作人员的疏忽而导致的安全事故。在工厂车间中,睡岗识别技术可以通过对工人的行为进行…