[总结]2022-2-9

春节后第一场比赛,状态不好。

P1心路历程

看到T1马上想到了勾股定理,但没有很好的做法。T2认为是比较好拿部分分的,T3认为可以转化为树形dp来做,但确实不可以。T4也实在没有什么好方法。
前两个小时一直在干T2,用了封装。后面先把T4的打表写完,然后想T1。想到了打表和搜索,但没有想到把两者合二为一。而且由于代码实现能力不足,所以-1。T3想到了菊花图的骗分发,但最后还是没有输出0的高。
最后10min发现T2只能过样例,由于时间限制,没能成功。29分。😦

wdnmd,T2本来可以拿30多,由于UKE,导致9.1。
T1的搜索本来可以骗点分,结果因为害怕,没有打。
T4要gjd?wnm

P2 比赛反思

P3感想

P4题目总结

打表+dfs/dp。先把周长不超过300的直角三角形的三条边的长度打表求出(勾股数),然后以周长排序,顺便去重。(比如有了3 4 5,不应再有 4 3 5)枚举勾股数然,后看看木棒能否拼成勾股数。3个很类似的dfs。

剪枝如下:

for(int i=lst+1;i<=n;++i) { if(!vis[i]) vis[i]="1;" dfsa(x+a[i],i); } < code></=n;++i)>

要用后缀数组。

引用此段。

把所有给的数加起来,就是每个数字出现次数的总和(废话,把这个总和记为x。
我们知道,1~9对总和的贡献是9:9个数,每个数有1个数字。
10~99对总和的贡献为180:90个数,每个数有2个数字。
100~999对总和的贡献为2700………………

我们再用x从前往后依次减9,180,2700…………直到减到不能减为止,我们把减的次数记为t,剩下的差记为a。
很明显,答案应该是个t+1位数。它减去了1~(10^t – 1)的贡献,所以剩下的贡献都是由(t+1)位数构成的。
我们把a/(t+1)记为l,得出它是(t+1)位数的第 l 个:你不能不取第 * 个而只取第 * +1 个。而且我们第一种不合法的情况就出来了:a%(t+1) != 0。
那么我们的答案就是l+10^(t+1) – 1。
但是到这里还没完:因为我们没有看0~9每个数具体的个数,所以有可能数据把9的个数减1,8的个数加1;那样的话,用总和算出来依旧合法,但数据实际上是不合法的。
上面那种情况很好处理,我们只需要把dbdbdb的程序偷过来…………我们只需要写一个解决原问题的程序:暨 ” 给一个正整数N,写出从1到N的之间的所有整数,然后统计其中出现的数字0到9分别各有多少个。”
解决的方法很好想,数位dp或分类讨论都行。

Original: https://www.cnblogs.com/xmtxlym/p/15876795.html
Author: 小铭同学lym
Title: [总结]2022-2-9

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/587719/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球