首页 > 其他分享 >2024.9.18训练记录

2024.9.18训练记录

时间:2024-09-18 10:51:31浏览次数:1  
标签:cnt 训练 2024.9 众数 sqrt leq 正负 18 贪心

订正昨天早上的模拟赛

T1 还没做,dp写法好像要记录什么的感觉好麻烦

T2
考试没做出来,其实是挺裸的dp
状态 记pair<int, int> \(f[i][j][k]\) 表示前 \(i\) 个物品,拉出来 \(j\) 个 \(1\) ,\(k\) 个 \(2\) 所需要的 \({背包数,最后一个背包剩的空间}\)。
可以分讨最后这一位是否被拉出来转移。
注意 \(f\) 中只存没有被拉出来的物品的方案,考虑所有被拉出的物品在最后贪心处理。
最后枚举 \(f[n][j][k]\),那么就是 \(j\) 个 \(1\) 和 \(k\) 个 \(2\) 要放到 \(f[n][j][k]\) 的状态里,可以一个一个放贪心解决。
实际写起来的难点是贪心的细节。
总感觉可以 \(O(1)\) 做贪心。如果贪心为 \(O(n)\),总时间复杂度就是 \(O(n^3)\)。

T3
构造结论题。
将 \(b\) 序列分成全部为 \(L\) 和 \(R\) 的段来考虑。那么在段头尝试尽量填大的数。

最后的填数方式是:
设共有 \(k\) 段,在段头填上 \([a_k,a_k-1,a_k-2...a_1]\)。其余数从大到小正负交替填补。

样例:
3 8 2 13 7
LLRLL

先确定段头:
7 x 8 13 x
然后依次填段中:
7 3 8 13 2
最后考虑正负:
段头肯定按照段的正负来填。
第一个在某段中的数填第一个段头的反方向,后面所有在段中的数正负交替。
L R R L L
这样可以保证每一个前缀的正负性与当前需要的相等。

T4
方法1:根号分治。
选择阈值为 \(B = \sqrt {n}\)。

对于出现次数 \(cnt[i] \leq B\) 的每一个 \(i\),可以发现如果某段的绝对众数是 \(i\),段长 \(len \leq 2 * cnt[i] \leq 2 * B\)。
所以可以枚举每一个段长 \(\leq B*2\) 的段,判断这个段是否有一个绝对众数,且这个绝对众数 \(x\) 的 \(cnt[x] \leq B\)。

对于其他的 \(i\),可以发现这样的 \(i\) 的个数 \(\leq \sqrt {n}\)。所以可以对于每一个这样的i单独考虑。
对于这样的一个 \(i\),将原序列中的 \(i\) 视作 \(1\),所有不是 \(i\) 的数视作 \(0\),统计前缀和 \(S\),可以发现:
如果一个段 \([i, j]\) 的绝对众数是 \(i\),则 \(S_i - S_{j-1} > (i - j + 1) - (S_i - S_{j-1})\)。
即:
\(2S_i - i > 2S_{j - 1} - (j - 1)\) 且 \(i >= j\)
这是一个二位偏序,可以用权值树状数组维护。
两个答案加起来就是本题答案。复杂度 \(O(n \sqrt{n})\)。

标签:cnt,训练,2024.9,众数,sqrt,leq,正负,18,贪心
From: https://www.cnblogs.com/docxjun/p/18418084

相关文章

  • 实操触发器的使用 mysql 20240918_102020
    需求新建日志表用于记录老师表的数据化情况起个名字teacher_log需要的列idoperationmsg建老师日志表CREATETABLEteacher_log( idINTPRIMARYKEYAUTO_INCREMENT, operationVARCHAR(11)NOTNULL, msgVARCHAR(200)NOTNULL);定义添加触发器如果往老师表tea......
  • 代码随想录算法训练营第六十天 | Bellman_ford之判断负权回路
    目录Bellman_ford之判断负权回路思路常规拓展方法一: Bellman_ford-超时方法二:Bellman_ford2方法三:Bellman_ford队列优化Bellman_ford之判断负权回路题目链接:卡码网:95.城市间货物运输II文章讲解:代码随想录 某国为促进城市间经济交流,决定对货物运输提供......
  • 代码随想录算法训练营第六十天 | Bellman_ford 队列优化算法
    目录Bellman_ford队列优化算法思路模拟过程方法一:Bellman_ford队列优化Bellman_ford队列优化算法题目链接:卡码网:94.城市间货物运输I文章讲解:代码随想录 某国为促进城市间经济交流,决定对货物运输提供补贴。共有n个编号为1到n的城市,通过道路网络连接,......
  • 代码随想录算法训练营第七天|第454题.四数相加II 383. 赎金信 第15题. 三数之和 第18
    第454题.四数相加II给定四个包含整数的数组列表 A,B,C,D,计算有多少个元组(i,j,k,l) ,使得 A[i]+B[j]+C[k]+D[l]=0。为了使问题简单化,所有的A,B,C,D具有相同的长度 N,且0≤N≤500。所有整数的范围在-2^28到2^28-1之间,最终结果不会超......
  • 代码随想录算法训练营第一天|704二分查找 27移除数组 977.有序数组的平方
    704二分查找给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4示例 2:输......
  • 代码随想录算法训练营二天|209. 长度最小的子数组 59.螺旋矩阵II 区间和 开发商购买土
    209.长度最小的子数组太久没做题初始思路只能想到暴力破解,看了一眼提示可能会用到前缀和,能够想到只要建立一个新数组,bi=a0+a1+...+ai即数组a的前缀,这样子序列i到j就可以表示为bj-bi-1,由于数组元素是大于1的,所以b数组必然是递增的,那么在计算子序列的时候,当符合条......
  • 代码随想录算法训练营第三天|203移除链表元素 707设计链表 206反转链表
    203.移除链表元素题意:删除链表中等于给定值val的所有节点。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head=[7,7,7,7],val=7输出:[]链表一直是处理的不太好的数据结构,太久没处理过,第一次做......
  • 代码随想录算法训练营第四天|24两两交换链表中的节点 19删除链表的倒数第N个节点 02.0
    24.两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。由于今天赶时间,第一眼看完题目没思路就直接看文字解析了,但还是复述一下看完之后自己的理解/想法/思路。这一题感觉对......
  • 2024.9.16 Python,最短的桥
    1.最短的桥:这个题我最新的代码如下:fromcollectionsimportdequeclassSolution:defshortestBridge(self,grid:List[List[int]])->int:nr=len(grid)ifnr==0:return0nc=len(grid[0])island=deque([])......
  • 2024.9.17 Python
    1.现有字典d={‘a’:24,’g’:52,’l’:12,’k’:33}请按字典中的value值进行排序?sorted(d.items(),key=lambdax:x[1])[1]换成0即可变成按照键排序2.del列表名[index]:删除指定索引的数据3.列表名.remove(数据):删除第一个出现的指定数据4.列表名.pop(index)5.列表名......