首页 > 其他分享 >2024.10 做题记录 /

2024.10 做题记录 /

时间:2024-10-06 16:10:55浏览次数:1  
标签:2024.10 return gcd 记录 即可 端点 SG dp

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\) 可以作为答案,然后就是求出从任意根开始走能走到的最大点。

标签:2024.10,return,gcd,记录,即可,端点,SG,dp
From: https://www.cnblogs.com/chelsyqwq/p/18449156

相关文章

  • 【CodeForces训练记录】Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final
    赛后反思做红温了,太菜了,每题都需要WA几次才能过,B题看到MEX选择性害怕,时间复杂度又算错了A题每次选择一对\(a_i,a_j\)把均值插入数组最后面,要想结果最大,对于两个数求均值,最后的结果一定是小于等于其中的较大值,我们可以考虑如何最大化最后一次操作,想到将最大值保留在最后再......
  • java性能调优记录
    五、设计模式调优单例模式最简单的单例模式及问题分析//懒汉模式publicfinalclassSingleton{privatestaticSingletoninstance=null;//不实例化privateSingleton(){if(instance!=null){thrownewRuntimeException("UsegetInstance()methodtoge......
  • Nodered学习记录-MQTT
    安装EMQXEMQX(以前称为EMQ)是一个开源的、高度可扩展且高可用的分布式MQTT消息代理,专为物联网(IoT)、机器对机器(M2M)通信和移动应用程序设计。它支持MQTT和其他IoT协议如CoAP/LwM2M,能够处理数百万并发连接,并提供强大的消息路由能力。通过docker安装官方文档$dockerpullem......
  • idea源码学习记录-vfs
    参考https://plugins.jetbrains.com/docs/intellij/virtual-file-system.html注:我写笔记用的源码版本是232.8660.185我的idea版本为241.17011.79当前的官方文档用的版本是242.23339.11vfs是idea的虚拟文件系统(VirtualFileSystem)TheVirtualFileSystem(VFS)isa......
  • 团队训练记录2024.10.5
    这次double精度上卡了,赛时和学校强队差两题题目链接:https://codeforces.com/gym/104023/problemA.Dunai队友写的,答案在总冠军位人数和位置上冠军加非冠军人数最小取min?#include<bits/stdc++.h>#definetest(i)cout<<#i<<""<<i<<""<<endl;#defin......
  • 2024.10.1 近期练习
    CF1993F2Dyn-scriptedRobot(HardVersion)这个题非常的一眼,首先翻转路径的操作可以转化为翻转矩形。也就是,如果触碰了边界不改变行走的路径,而是继续走下去,只不过对应的位置需要对称回去。那么,计算走到\((0,0)\)的次数,也就是在反转后的坐标系里的\((2k_1w,2k_2h)\)的位置......
  • 2024.10.5 LGJ Round
    A给定\(n\)个区间,你要选出最多区间对数,使得每一对的区间都不交。\(n\le4e5\)。反悔贪心,我们将所有区间按\(l_i\)从小到大排序,一个一个加入,加入的时候有两种情况。1.之前的区间中存在未匹配的区间,且可以跟当前区间匹配。我们随便选择一个区间跟当前区间匹配即可。2.找不到......
  • 算法练习记录(24.10.5)
    1.B.BrightnessBegins思路要求最后的灯泡打开的数量,由于一开始灯泡是打开的,如果最后还需要打开,那么操作数量一定是偶数,移目至操作前提,需要灯泡的序号能整除\(x\),由于遍历1~x,推出最后灯泡\(i\)亮的条件是:\(1~i\)中有偶数个\(i\)的因数,即\(i\)有偶数个因数,反之即有奇数个......
  • 2024.10.5 LGJ Round
    A给定\(n\)个区间,你要选出最多区间对数,使得每一对的区间都不交。\(n\le4e5\)。反悔贪心,我们将所有区间按\(l_i\)从小到大排序,一个一个加入,加入的时候有两种情况。1.之前的区间中存在未匹配的区间,且可以跟当前区间匹配。我们随便选择一个区间跟当前区间匹配即可。2.找不到......
  • 「分数规划」学习笔记及做题记录
    「分数规划」学习笔记及做题记录做题时发现不会分数规划,赶紧来学一下。分数规划用于求解下面一类问题:有\(n\)个物品,第\(i\)个物品的价值为\(a_i\),费用为\(b_i\)。从中选择若干个物品,使得价值与费用的比值\(\dfrac{\suma}{\sumb}\)最大/最小。另一种更严谨的表示方......