Codeforces Round #742 (Div. 2)

赛时一直调T4结果最后方法错了QAQ


T1
L->L
R->R
U->D
D->U
输出即可


T2
我终于做出了异或题(不是)
小于a的数全部必须有,计算其异或和s
用b异或s得到剩下的数的异或和为y
如果y不等于a答案即为a+1
否则答案为a+2(两个数均在某一个高位加上一个1即可)
但是还需要特判一下y=0所以不需要加数答案直接为a的奇葩情况


T3
非常的tricky

法一:考虑数位dp
f(i,j,k)表示前i位,当前位(不)进位、上一位(不)进位时候的方案数

直接枚举上一个数位和上上个数位的的情况转移即可。

具体实现有点麻烦

法二:在写数位dp的时候你大概会发现当前位置x其实只和x-2有关
其实就是奇数位和偶数位的方案是独立的,上述方法的麻烦之处就在于需要统计上和当前决策毫无关系的上一位,而当前位的答案又来源于前2位,然后前一位又统计过前2位。。。

总之就非常麻烦

于是我们直接把奇数和偶数位分开考虑

把123456可以拆成

135 和 246

然后统计出普通的两个数加起来等于135和246的方案数,显然(或打表)可知,答案为136和247(x+1)

最后乘起来即可。

但是还不能有0,所以答案再减2。


T4
接近正确答案然而并不是正确答案(淦)
不然这把我绝对上大分)

首先我们肯定尽量让更高为的数的和尽量的大。
因为越高位的1比十进制多得更多。
10->11 100->121
10×11<121

首先如果原数各位加起来和大于等于n,直接拆成10000 100000 1000 10 10 1...这样的形式,最后一个数把剩余的全部输出即可。

而如果原数位加起来和不足n,我们必须考虑拆原数。

正确的贪心方法是:从最低位开始。如果有21053104先拆一个成2个105和2个104和10个103,判断现在是否满足条件,不行就继续拆,这样一定最优,因为我们尽可能地保留了高位数。


T5
居然是我最喜欢的数据结构
没看真是亏大发了。。。。。
线段树。
主要是答案的合并问题。可以发现左段右端如果小于等于右段左端,那么合并后会产生的更多新的答案为左段右端结束的最长不下降子序列长度乘右段左端的。

这些东西都可以维护。很经典。

其实和分治很像。。。。


T6尚不明确)
还需继续努力啊。。。。。。

posted @   lei_yu  阅读(47)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示