十月训练记录

2022/10/1:

The 7th China Collegiate Programming Contest, Finals (CCPC Finals 2021)

A:模拟题,队列或者vector都可以解决,但是要注意不用一直复制前面的指令。

F:注意到在取模过程中,对x真正造成影响的模数⼀定是单调递减的,因为当x对⼀个数p进⾏取模之 后,结果⼀定⼩于p,之后再去模那些⼤于等于p的数的话这个结果⼀定是不变的。所以可以把所有 数字排序,其中最⼩的模数⼀定是会被⽤上的,从所有情况的结 果取最⼤值即可。

L:贪心

2022/10/2:

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

A:可以发现平均分为三段时有可以使得最小值最大,再-2即可。

B:先排序,然后直接模拟会超时,找到数学关系后求解。

C:模拟题加并查集。熟练掌握并查集的使用。

并查集的找根与合并操作:

 

2022/10/3:

2019山东省赛 - Virtual Judge (vjudge.net)

A:一个日期模拟题,按照题意模拟即可。

C:后补题,陷入了思维误区!!!认为最大值和终点的相对位置一直是不变的,其实只是相对于每次的起点(终点)来说,故最大值只可能出现在第一次和最后一次,中间(k-1)次贡献对起点位置做贡献。

D:可以发现结果与边的连接情况无关,和边的条数和点的条数有关。

F:初步想法,与最大值和最小值有关,最后发现最优解肯定是平均值,然后找到小于平均值的分配,最后将多出来的数删除(取模)。

M:也是一个模拟题,注意终止条件即可,还是要细心,不能急,认真分析题意和条件。

2022/10/4:

今天没有新题,补以前没有写出来的题。

2022/10/5:

迎新工作。

2022/10/8:

Tasks - AtCoder Beginner Contest 272

ABC直接暴力即可,但是错了几次,不够细心。

E:直接暴力即可,但要稍微优化一下,记录每一次的a[i],由题答案只可能在0-n之间,a[i]<0时不需要,当a[i]>n时不需要。用vector存储每次符合条件的值再排序查找即可。

4625. 压缩文件 - AcWing题库

贪心,每次找压缩量最多的。

Tasks - AtCoder Beginner Contest 272

D:bfs不过与往常bfs不同的是,可以走的方向需要预处理(考虑到长和宽平方和为m的可能性),不再是上下左右,还有求的是最短路径,不需要设vis数组判断是否走过,只需判断路径长度是否更小即可,所以开始设长度为无穷大。

2022/10/9:

Dashboard - Codeforces Global Round 20 - Codeforces

D:正向思维:从头开始遍历,如果发现a[i],b[j]对应位置不相等则将a[i]放到后面去,用一个数组存着,若相等则找数组中是否存着a[i]若有,j++,该数减一,若没有直接i++,j++;最后应该是i和j同时走完。若没有则无法匹配。

逆向思维:从末尾开始遍历对b数组进行操作连续相等的数n个可以将n-1个数存储下来,每次遇上a与b不匹配的情况可抵消掉,若不相等后面也没有数抵消,则无法匹配,直到b遍历完为止。

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

B:可以发现这个题是个半递推题,根据前面的状态推后面的状态,购买第i个网页商品的概率=跳转到第i个网页的概率乘以在该网页不跳转网页的概率。因为最后一个网页无法跳转,所以就是跳转到最后一个网页的概率。

F:只需要找到三个因子满足剩下条件即可,可以发现除n==1外其他的必须满足因子为素数,且最小相差n可满足条件,则因子为1,a,b,c,ab,ac,bc,abc。这样的话他们之间相差肯定大于n。

H:将不同的集合放在一起,集合出现次数大于1的会发生碰撞,每一个新加入的集合都会与该“集合”里面的集合发生一次碰撞,设每个发生碰撞的集合的元素个数为n,则,碰撞次数为n*(n+1)/2。

K:几何题,将三个边分别贡献的x轴长度和y轴长度求和即可。

2022/10/10:

Dashboard - Dytechlab Cup 2022 - Codeforces

A:贪心,每组只取从a开始连续的n/k个字母,若中间有空缺那么mex即这个字母,否则为第n/k+1个字母,后面的字母可以不管,最后填充即可。

2022/10/11:

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

ABC:签到题,模拟加规律加枚举。

D:二叉树数组形式模拟归并排序。

E:动态规划,设f[i]为前i个合理。对于每一个数探讨个数在前和在后的情况。最后判断前n个是否合理即可。

2022/10/12:

补之前的题...

2022/10/13:

Dashboard - Codeforces Round #827 (Div. 4) - Codeforces

ABC:AB直接模拟即可,C弄清题意,并不是一人一回合,不要急于做题!!!弄清题目意思。

D:优化,开始暴力直接超时,可以发现数据大小在1-1000之间,但是数据范围大,所以可以从数据大小入手。

E:不能直接查找,可以先预处理一下身高多少可以到达多高即前缀答案,然后二分查找答案。

2022/10/14:

续昨日题:

F:对于s,t的重排,t除a之外的字母放在前面,s除a之外的字母放在后面,如果t中有除a之外的字母,那么必然比s大,如果没有,则看s中是否有除a之外的字母,也可以证明若有则必然比t大,若没有,那就是比较两者之间a的个数。

G:要使前缀或运算的值最大,那么要找到一个数的二进制位和其前缀或值进行或运算取最大,可以用两层循环实现,初看为O(n^2)的复杂度,因为要找到每次的最大值,后面发现最多进行33次之后后面对前缀或值就不影响了,因为每次取最坏结果,下一个数对前缀或二进制1的贡献为1。所以时间复杂度可优化为O(n*33)。

2022/10/15:

4704. 数对 - AcWing题库

直接暴力,注意数对顺序有影响所以找到一个+2;

4705. 矩阵 - AcWing题库

矩阵较小,只有四个元素,可以化为数组,用map存储。

2022/10/16:

Dashboard - 2022-2023 ICPC Brazil Subregional Programming Contest - Codeforces

A:直接模拟,找到每个连续区间a的个数。

C:

D:对于当前点(x0,y0)和目标点(x,y),x0的变化只能为(0+x0)/2或者(x0+2^n)/2。反反复复之后总可以达到x,y也是如此,取两者的最大次数即可,注意,这里由目标点推当前点比较容易。

E:由前面的状态推后面的状态,记录每个高度出现的次数,如果hi+1没有出现,那么拿一根箭,如果有出现而且用过的次数<出现的次数,那么就使用前一根箭。否则重新拿一根箭。

F:数据较小,将每个单词的所有情况例举出来,最后取出现次数最大的即可。

H:

 I:按照题意模拟即可。

J:

N:

2022/10/17:

B-苹果排序_“帆软杯”武汉大学2022级新生程序设计竞赛 (nowcoder.com)

D-甩锅_“帆软杯”武汉大学2022级新生程序设计竞赛 (nowcoder.com)

 如果直接单独算概率显然不现实,计算数学期望即可。

F-最短公共超串_“帆软杯”武汉大学2022级新生程序设计竞赛 (nowcoder.com)

 待解...

H-犹太棋(Easy Version)_“帆软杯”武汉大学2022级新生程序设计竞赛 (nowcoder.com)

可以发现先手必胜 。

L-最大公约数_“帆软杯”武汉大学2022级新生程序设计竞赛 (nowcoder.com)

除每个数对自身的公约数外,其余公约数出现次数都为偶数次,故只需要找到出现奇数次的公约数即可。

M-WHU_“帆软杯”武汉大学2022级新生程序设计竞赛 (nowcoder.com)

直接手算即可。

2022/10/18:

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

A:判断数字对应的字符是否一致。

B:每次更新奇数和偶数的个数。

C:找到距离最远的g。

D:先计算初始2的幂,每次使用含因子2最多的i,直至用完。

E1:直接暴力显然不行,找到a*b与x的最大公约数,然后找到第一个大于d的a*b除去x的因子后还需要的因数的最小倍数。

2022/10/19:

788. 逆序对的数量 - AcWing题库

用归并排序思想求逆序对:

 

2022/10/20:

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

A:可以发现只有当有n个石头的时候不合题意,开始没看懂题意wa了好几发,无语了。

B:不管采取什么方案,总会有一个怪兽释放不出技能,即不能给相邻的怪兽加血。故只需要算出所有技能加血量和本身加血量之和然后减去技能加血贡献最大值即可。

C:数据较小,直接模拟即可,可以发现对于Alice而已每次除去最大可去除数是最优解,对于Bob而言每次将Alice可去除数中最小的那个变为不可去除数是最优解,将数组排序后,明显为一个双指针问题,由r指针,即Alice先手,每次取最大可去除数,但值得注意是是,如果取得的数刚好为可去除数最大值,那么只有一个有效,因为取完之后就再也不能取到该数了,所以要做一下特判。

2022/10/22:

2022年华中科技大学程序设计新生赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)

C:小圆绕大圆求小圆自转圈数,不能直接化曲为直,小圆自转一圈圆心的路程为2πr在大圆上的路程为2π(r+R),故得圈数。

E:贪心,每次取最大的两个即可。

H:字符串匹配。

J:博弈论,注意两者都可阻止对方行动。

L:模拟,理解题意即可。

N:数论,当n为偶数的时候比较好求,当n为奇数的时候可以枚举,构造一个n*(k+1)-n*k,且符合题意的数。

2022/10/23:

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

A:对于每一个问题的后面必然出现一个回答,即找到每一个问题后面是否对应一个回答,于是可以令l为问题的个数,每次出现一个问题++,出现一个回答--,直到为0为止。最后l的个数为0即全部回答完毕。

B:构造一个数组使得相邻的数最大,可想到一个排列可拆分为一半,先取右边一个最小的再取左边最小的,这样可以使得相邻数之差最大。注意分奇偶讨论。

C1:可以发现只需找到1和-1的个数即可,对于相等的情况,每一个位置为一个区间。可以使得相加为0,如果不相等则把多的1或者是-1转化为少的(将两个一组,后面的为相反数)。那么他们两个相差一定为偶数,如果为奇数的话就不能实现了。

C2:多一个0,不影响整体思路。

D:下面的所有数字的阶乘和是否可以整除上面的x的阶乘,也很简单就两个结论。

(1) n! = (n-1)! * n .这就涉及到了进化理论 低层次的可以逐步进化到高阶段

(2)n! /(n-1)! = k 高段位阶乘可以整除比他小的段位阶乘,因此相当于最后进化的那个阶乘要大于等于x!

如果不能进化,那么就不能整除。

2022/10/24:

Dashboard - Codeforces Global Round 23 - Codeforces

A:根据给出操作可以发现只要出现1则一定可以化为【1】。

B:最优解为删除前面的1,将1加到后面的0上,故为双指针问题。

C:先转为使数组为非递减数列,然后再转为差分数组为非负数,又相邻的两数之差一定小于n,每次操作可以使差分数组加i,即使差分数组的一个数变为非负数。在n次内一定可以实现,只需记录相邻数之差和对应位置即可。然后排序,先选相邻数之差大的!

2022/10/25:

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

A:排列组合问题,从可能数中选两个不同的数,然后在四个位置进行排列。

B:尽量使1和2的位置最远可满足要求。

C:只要第一个盒子有盖子,就把第一个盒子拿下来,把它加到答案里。然后,只要还剩下盒子,就取第一个盒子和后面连续有盖子的盒子的最大数量设为k(这个数字可能是零)。在这段上,前k大数的和即为最优解。(每次只能移动一次!!!)。做题第一步,看清楚题目意思再分析!!!

D:仔细斟酌题目的每一句话的涵义,随机值!!!因此可以暴力加枚举。

2022/10/26:

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

A:

相邻两数的最大公约数为1。 试探n,n-1,n和n-1三种情况。最多为3。

B:可以发现前面的0对答案无影响,从最后开始,如果0的后面有1,那么要转化两次为全部变为1,如果没有1,那么直接变为变为1。可以证明为最优解。

D1:

 每次记录答案即可,不要每次都重头开始寻找答案。 

2022/10/27: 

94. 递归实现排列型枚举 - AcWing题库

输出n的全排列,那么可以通过dfs来实现用vis数组判断是否使用,a数组存储每次存储的数,递归实现,当个数大于n时输出结果。

 92. 递归实现指数型枚举 - AcWing题库

解一:与上题不一样的一点是,这里是求1至n的全排列有序版,那么对于全排列而言,每次选择一个数之后就不能再选择之前的数了。加一个数判断即可。

解二:发现其结果和二进制数的表示相关,可以状态压缩。

 789. 数的范围 - AcWing题库

二分查找:

2022/10/28: 

790. 数的三次方根 - AcWing题库

 浮点数二分,注意判断时精确到小数点后一位保险,二分每次取中点即可,还有就是输入数据是浮点型!!!不然结果也会出错。

1205. 买不到的数目 - AcWing题库

实在不会可以找规律,在一个数之后应该都是可以满足的,可以先dfs爆搜看看结果。然后一个个试打表。找到m是否是p和q的线性关系。然后找规律。

 1211. 蚂蚁感冒 - AcWing题库

理解题意加考虑特殊情况: 

2022/10/29:

Dashboard - Codeforces Round #831 (Div. 1 + Div. 2) - Codeforces

A:先打素数表,然后直接暴力找到符号题意的数。

B:周长应该为长*宽,当长为最短时,宽取最大值。宽为最短时,长取最大值。取两者最小值即可。

C:不管怎么安排,总可以选到两个相邻最近的,安排他们在相邻篮子,此时,空篮子里应该放的是与临近篮子相隔最远的数。故分两种情况讨论。

1210. 连号区间数 - AcWing题库

一开始用multiset去遍历,因为插入的时间复杂度为O(n),后面发现只需要找到最大值最小值和区间长度对比就行。

2022/10/31:

1238. 日志统计 - AcWing题库

双指针问题,将不同的id根据大小放在一起,一次次统计赞个数,丢弃不合题意的赞的个数。每次保证在同一个id上进行。 计算合题意的id即可。

1055. 股票买卖 II - AcWing题库

贪心思想,在股票跌至最低时买,涨到最高时卖。

1246. 等差数列 - AcWing题库

数论,最大公约数,已经给出的n个数之间,求他们大小相邻数之差的最大公约数,即最大公差,得出最短数列个数,对于0的时候要特判,防止除0的情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 训练要点: - 学习如何使用Python的matplotlib库绘制漏斗图和词云图; - 熟悉数据的预处理和清洗,以便于可视化的呈现。 2. 需求说明: 为了了解各商品的销售情况,我们需要统计排名前5的商品类别销售额,并绘制漏斗图,同时根据商品的销售数量、商品名称绘制词云图。 具体步骤如下: - 数据预处理:读取数据并进行清洗和整理,将数据按照二级类别进行分类,并统计每个类别的销售额和销售数量。 - 绘制漏斗图:使用matplotlib库绘制漏斗图,并将前5个类别的销售额呈现在漏斗图上。 - 绘制词云图:使用Python的wordcloud库绘制词云图,并将销售数量作为词云图的权重,商品名称作为词云图的内容。 以下是一个可能的Python代码示例: ```python import pandas as pd import matplotlib.pyplot as plt from wordcloud import WordCloud # 数据预处理 df = pd.read_csv("sales_data.csv") df = df.groupby(["二级类别", "商品名称"]).agg({"销售数量": "sum", "销售额": "sum"}).reset_index() df_top5 = df.groupby("二级类别").sum().sort_values(by="销售额", ascending=False).head(5) # 绘制漏斗图 fig, ax = plt.subplots(figsize=(8, 6)) ax.barh(df_top5.index, df_top5["销售额"]) ax.invert_yaxis() ax.set_xlabel("销售额") ax.set_ylabel("商品类别") ax.set_title("排名前5的商品类别销售额漏斗图") # 绘制词云图 wordcloud = WordCloud(width=800, height=600, background_color="white").generate_from_frequencies(dict(zip(df["商品名称"], df["销售数量"]))) plt.figure(figsize=(10, 8)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis("off") plt.title("商品销售数量词云图") plt.show() ``` 请注意,以上代码仅供参考,实际项目中可能需要根据数据的具体情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值