九月训练记录

2022/9/5:

Dashboard - COMPFEST 14 - Preliminary Online Mirror (Unrated, ICPC Rules, Teams Preferred) - Codeforces

A:由题可发现规律。

B:贪心思想,每次先取队伍中战力最大的,然后拿出战力最小的充人数。不能直接数学计算需要多少人,比较麻烦,最好枚举法,双指针。

G:根据公式可以推得b=a+1或者b=a+2的时候可以去最小x,一开始没有想到b=a+2的情况。根据n可以由数学公式O(1)的时间复杂度推出,也可以O(n)的复杂度推出,每次取两者小的即可。

Codeforces Round #818 (Div. 2) C

由末态推初态,可以发现当a[i]>b[i]时不可能实现。当a[i]<b[i]且b[i]<=下一个b[(i+1)%n]+1时可以实现,否则不能实现。

2022/9/6:

Dashboard - Codeforces Round #819 (Div. 1 + Div. 2) and Grimoire of Code Annual Contest 2022 - Codeforces

 A:一开始只想着最大与最小移到最后或者最前可以令a[n]-a[1]取最大值,但是还有一种可能就是相邻的两个数,a[i+1]-a[i]也是可能取到最大值的。

B:题目没有看懂。

2022/9/7:

继续补昨天的题:

B:给出数组的位数n和数组元素总和m,求是否存在一个数组a使得每个元素,在数组中严格小于a[i]的数的异或值为0。我们知道偶数个相同的数异或值为0。首先将m均分给n个元素,如果没有剩余,那么肯定合题意,如果有剩余,分n的奇偶性讨论,重新分配看是否合题意。

2022/9/8:

Dashboard - Educational Codeforces Round 135 (Rated for Div. 2) - Codeforces

A:每次可以取两个不一样的颜色,总数为奇数,那么总可以剩下一种颜色,所以数量最多的颜色球总可以留到最后。

B:对于每次x的变化,可以找到规律,要使最后x的值最大,那么只需最后两个数x=n-1+n;所以只需要x在到a[n-2]时,x=0即可。

2022/9/9:

继续补昨天的题:

C:给定a,b两个数组,求使得a,b两数组想等的最小操作数,每次操作可以使数组中的数变为它的十进制位数。显然将a,b同时排序,对应位置下的数相隔最小,对他们操作即可,同时要用multiset维护有序。

Dashboard - Codeforces Round #819 (Div. 1 + Div. 2) and Grimoire of Code Annual Contest 2022 - Codeforces

 C:找平衡括号建连通图,当且仅当两个区间头或尾是共点的。
(1)当 '(' 连续出现时我们发现,'(' 与 ')' 数量相等的区间一定没有相交
(2)例如 (()) 区间为 [1, 4], [2, 3],连通块为2
(3)再例如 (()()) 区间为 [1, 6], [2, 3], [4, 5], [2, 5]
(4)后面三个区间明显能合并,最终区间可看成 [1, 6], [2, 5]
(5)因此 ()()···() == ()
结论:连续 '(' 是连通块增加的必要条件,答案即为每个 1 + 连续出现‘(’的个数。

Dashboard - Codeforces Round #808 (Div. 2) - Codeforces

C:(1)正向思维:因为越做题越傻,所以尽量使那些会让自己变傻的题放在后面做,只要找到一天,在此之后每天做题到最后智商>=0就可行。故想到二分答案。

(2)逆向思维:令最后一天智商为0,从最后一天往前推,若当前智商>=需要的智商,直接做该题即可。若需要智商>当前智商)智商增加且做这一题,直至增加到本来智商。

2022/9/10:

中秋节,休息一下,中秋快乐啊!

2022/9/11:

Dashboard - Codeforces Round #762 (Div. 3) - Codeforces

A:模拟题,判断字符串前一半是否和后一半相等

B:先将所有符合条件的数用set存起来,顺序查找即可。

C:模拟题,用定义的加法逆推出前者。

D:求使xx最小值最大,二分答案即可(涉及到动态二维数组的传递)

E:本题涉及mex搞清他的概念后,可以发现第i个结果收到第i-1个结果的影响,递推加贪心。

2022/9/12:

Dashboard - Codeforces Round #820 (Div. 3) - Codeforces

A:签到题,只需比较两个电梯谁更快到达一楼即可。

B:模拟题,不过要从后往前推,找到对应的字符串。

C:一开始没有想到,后面补题,本题问题在于绝对值的处理,保证路径绝对值内都是正数或者负数并且加上起点和终点,可以使最后消耗的成本为最低。

D:理解题意后可以发现只需记录b[i]-a[i],然后取两个相加大于0时和题意,为取最优解,每次取最大和最小能满足的,用mlutiset维护即可,也可以先排序然后再双指针。

2022/9/13:

Dashboard - Codeforces Round #780 (Div. 3) - Codeforces

A:根据题意找规律。

B:只需最大的数与第二大的数(可以与最大相等)相差小于等于1即可满足。

C:从头开始遍历,找到最近两个相等的字符然后删除中间的字符,最后记得删除全部不相等的字符。

D:双指针问题,只需找到非零连续段的乘积,从两边删去一定的数使之乘积最大,分情况讨论即可。但值得注意的是这一题的值域太大,不能直接乘法,所以采用取个对数,即找到正负二的个数代替乘积大小,符号另做讨论。

2022/9/18:

欧拉筛:

P1217 [USACO1.5]回文质数 Prime Palindromes

题解:该题考察欧拉筛和回文知识,位数为偶数的回文必定不是偶数(11除外)其他的都可被11整除。

牛客小白月赛57

A:最小长与最小宽的乘积即为所求。

B:三种可能0、1、2。0特判,初末位置0的个数即为结果。

C:开始思路错误,最优中转点为1和n。

D:找到最大数,从2开始枚举到最大数,若数组中出现了两次及以上的枚举数的倍数则为可行解,记录最大值。数组范围较小可以用数组来记录出现次数(不可随便用map或者multiset,时间复杂度高),数组为O(1)。

2022/9/19:

约数:

870. 约数个数 - AcWing题库

题解:

871. 约数之和 - AcWing题库

题解:

2022/9/20: 

Dashboard - Codeforces Round #821 (Div. 2) - Codeforces

A:实际上就是把数组分为连续m个区间,每个区间里面有k个数,找到m个区间里第i个数的最大值相加求和即可。

B:构造题,可以发现当x,y同时不为0或者同时为0时,无法知道胜利者,当比赛常数(n-1)能够整除x,y中不为0的数时,有解。

C:构造题,对于l<r;al+ar为奇数时,ar=al,为偶数时,al=ar;可以这题和奇偶性、位置都有关系。构造一个全相等的数列,那么有三种情况,有奇有偶,全为偶,全为奇,后面两种由于任意两个数相加都为偶数,则可以把所有数都变为最后一个数。前一种情况,考虑第一个数的奇偶性,如为奇数,那么可以先把所有奇数赋为最后出现的奇数,然后再把后面的所有偶数赋为第一个奇数。偶数一样的思路。

D1:(后补题)贪心策略,可以发现当不同位置数为偶数时有解,且大于二时每次可取不相邻的数取最优解,等于二时讨论x和2y的值即可。

2022/9/21:

Dashboard - Codeforces Round #805 (Div. 3) - Codeforces

E:种类查并集,可以发现要满足条件,每一个数有且仅出现两次,最后形成的两个块中的数量为偶数。

牛客小白月赛55_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)

B:二进制运算,找到a,b与c二级制与的关系。

C:直接暴力即可,做一下预处理。

D:找规律,贪心。

2022/9/22:

154. 滑动窗口 - AcWing题库

题解:单调队列来解决,用数组来模拟,要求区间最小值时,只需构造一个递增队列即可,队头即为所求,求最大值就构造一个递减队列。

2022/9/23:

Dashboard - Codeforces Round #822 (Div. 2) - Codeforces

A:可以发现先排序,然后相邻两个求差,找到最小的两个的相邻两个求差的和。

B:找到规律可知除了两边安装灯之外其余都不用安装。

C:贪心思维,从前向后遍历,找到需要删除的数的所有连续倍数,一并删除。注意删除后的数还可以找后面连续的倍数删除。

2022/9/24:

背包问题:

Dashboard - Codeforces Round #785 (Div. 2) - Codeforces

C:完全背包问题,先把1-N的回文数处理一下,建立一个v数组,相当于在这v个物品当中挑选使他们的和相加是n的方案总数,dp[i][j]用来表示从前i个回文数中选,总和相加是j的方案数,可以把n看成最大容量,v[i]为重量,方案数由两部分组成,一部分不包含vi,一部分包含vi,那么转移方程就是dp[i][j]=dp[i-1][j]+dp[i-1][j-v[i]]。还可以优化成一维,那么在初始化的时候需要把初始状态初始化为1,因为第一个回文数是1,而且方案只有一个。由于我们已经知道n的范围,我们可以先把所有的n算出来,然后输入的时候直接输出相应的f[n]就可以了。

2. 01背包问题 - AcWing题库

每个商品只可以取一次,求最大价值。

 

3. 完全背包问题 - AcWing题库

每个商品只可以取无数次,求最大价值。

 

 2022/9/25:

 AcWing 840. 模拟散列表 - AcWing

拉链法:重点理解用数组模拟链表加邻接表。

开放地址法:

841. 字符串哈希 - AcWing题库

重点掌握hash函数的取法和冲突概率最小的取法,一般取P=131 或 13331 为经验值。

unsigned long long:0 ~ 2^64 - 1, 无符号数溢出相当于取模

2022/9/26:

Dashboard - Codeforces Round #823 (Div. 2) - Codeforces

A:对于每一个轨道编号有两种处理,消耗1成本处理1个,消耗c成本处理所有该编号轨道,遍历每个轨道编号取消耗成本最小的。

B:找到一个集合地点,使得所有人到达的时间最短(距离和打扮都是1个单位时间),如果只看距离的话那么答案肯定是最左和最右的中间位置。但是多了一个打扮时间,由于我们可以知道最优解肯定在最左和最右之间,设为x,则可以将打扮时间看成路程时间,在x右边的人的位置可以看成a[i]+t[i],在x左边的人的位置可以看成a[i]-t[i]。找到最左和最右的位置取中间即可。

C:我们可以发现当一个数后面出现比它小的数时,它需要删除,因为这样小的数才可以到当前位置,使字典序更小,此时,这个数调到后面去(此操作不需要实现,只需打上记号即可),需要加一,如果是9则不需要。可以用优先队列实现,也可以用数组实现。最后用multiset记录所有字符输出。

4619. 减法操作 - AcWing题库

题解:两个操作,(1)任选一个数-2,(2)任选相邻的两个数-1。由(1)可知数组中非0偶数都可以化成2,奇数都可以化成1。再来看变成0的情况,可以发现偶数不需要考虑,只需考虑奇数即可,一个奇数的后面必须再找到一个奇数,且中间没有0的时候才可以变成0。如果不满足这个条件则不能化成0;

2022/9/27:

4579. 相遇问题 - AcWing题库

题目数据量较小,可直接模拟或者推公式。

4580. 砝码称重 - AcWing题库

找到规律即可。

2022/9/28:

模拟: 

P1042 [NOIP2003 普及组] 乒乓球 - 洛谷

一题花了一小时,主要是找bug花了将近四十分钟,最后发现是没有比赛结束的时候停止输入。orz。

枚举:

P1149 [NOIP2008 提高组] 火柴棒等式 - 洛谷

由于数据较小可以找到一定范围内数所需的火柴棍,注意枚举时的范围和是否已经初始化。

2022/9/29:

Dashboard - Educational Codeforces Round 136 (Rated for Div. 2) - Codeforces

A:一个跳马问题,找到一个位置使马无法移动,数据较小,通过手算发现规律。

B:绝对值问题,考虑去绝对值后a有无两种可能性即可,若所有均无两种可能则解唯一。

C:博弈论:

 该题为贪心加递推和组合数的求解,第一个为组合数公式利用递推求解:

还可以用快速幂求解组合数,该方式适合求单个大组合数。:

2022/9/30:

Dashboard - Codeforces Global Round 22 - Codeforces

A:冰火两个技能,交错发动技能时后面伤害可翻倍,则有比较两个技能的数量,数量多的(设为A)中取伤害最小放最前面,然后每次交错取A中伤害最高的,那么数量少的伤害都翻倍。最后A剩下的取原伤害。如果两者数量相等,那么谁先放都可以,问题就转化成了,找两者伤害最小值,然后拿两者总伤害*2-最小值。
B:根据所给部分前缀和(如果只给出一个前缀和,一定有解)可推出第二个前缀和位置及以后位置的a【i】,首先要满足这些a【i】是非递减的。然后在1到第一个前缀和的位置(设为k)中,如果a【i】都等于a【k+1】且和大于b【k】则满足题意。

C:经典博弈论:

A的本质是想让自己赢,所以她需要偶数

B的本质是想让自己赢,所以他需要A是奇数

对于一个数来说,加上一个偶数对这个数的奇偶性没有任何的影响,加上一个奇数会改变这个数的奇偶性。

如果此时的A选了一个偶数,那B必定也选偶数,因为B想把奇数留下让A选,改变A的奇偶性

如果此时的A选了一个奇数,那B必定也选奇数,因为B想把偶数留下让A选,不改变A的奇偶性

以四个奇数为一组分析。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值