Educational Codeforces Round 80 (Div. 2) 题解 1288A 1288B 1288C 1288D 1288E
Educational Codeforces Round 80 (Rated for Div. 2)
A
大概猜一下,就在\sqrt{d}附近,枚举一下就行。
B
设b有x位,那么有ab+a+b=a\cdot10^x+b,也就是b=10^x-1
也就是b= 9或者99或者999或者...的时候,每个a都是一个解;否则无解。
C
两种做法:
1.原题等价于求长度为2m,值域在1~n的非降序列a_1,a_2,...,a_m,b_m,b_{m-1}...,b_1.从充要性很容易就能证出来。
等价于不定方程x_1+x_2+...+x_n=2m的非负整数解的个数,即为C_{2m+n-1}^{n-1}。
2.dp。有很多种d法,我的就比较暴力。f(i,j,k)表示考虑前i个数,a_i=j,b_i=k的方案数。
f(i,j,k)=\sum\limits_{a\leq j, b\geq k}f(i-1,a,b).这玩意二维前缀和打打就O(1)转移过去了。
D
牛逼的二分搜索。
二分答案Ans,表示能否满足\mathop{min}\limits_{k=1}^mb_k\geq Ans,等价于对1\leq k\leq m都满足b_k\geq Ans,等价于选择两个i,j,对每个k都满足max(a_{ik},a_{jk})\geq Ans,等价于a_{ik}\geq Ans或a_{jk}\geq Ans.
对每一行,如果a_{ik}\geq Ans,就把它看成1,否则看成0,实际上就是找是不是存在两行,按位求或的结果是2^m-1。打表,单次check是O(nm+4^m)的,总复杂度为O((nm+4^m)log\ a_{max})。
E
给定一个LRU访问序列,求在整个过程中每个数离队首的最近距离和最远距离。
最近距离很好求。主要是最远距离。举个例子,序列
21535213
观察1的两次访问,之间有5、3、2三个数被访问过,那么1就在这段时间最远被挤到了第四位。也就是说,相邻的一对相同的数之间不同的数字的个数就是它在这段时间内的最远距离。
维护这么一个序列b_x和变量i,表示区间[x,i]之间不同的数的个数。
当i从i-1变成i时,记a_i上次出现的位置为p_i(如上面那个例子中p_7=2,1上次出现在第2位),则区间[p_i,i],[p_i-1,i],[p_i-2,i],...中出现了至少两次a_i,而区间[p_i+1,i],[p_i+2,i],...,[i,i]中出现且仅出现一次a_i,都是在i这个位置出现的。这些信息是从i-1变成i之后才得到的。
更新答案就是查询[p_i+1,i]之间有多少个不同的数,也就是查询b_{p_i+1}.
因此需要对数组b维护两种操作:
1.区间[p_i+1,i]加1;
2.单点查询某个值。
线段树搞定。
至于初始时的信息,可以提前假想一个访问序列n,n-1,...,2,1来完成。
另外查询区间有多少个不同的数也可以用主席树或者权值线段树做,但我不会,(嗯菜的理直气壮
F
(看完题解了,大概是个上下界费用流?网络流都是让我队友敲的,起床之后再看看能不能找个板子抄上去吧,先空着)
后记
太棒了,又学到许多线段树
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?