ZROI 19.08.08模拟赛

传送门

写在前面:为了保护正睿题目版权,这里不放题面,只写题解。



首先恭喜swk今天翻车!

“小心大样例演你。”——天祺鸽鸽

果然swk今天被大样例演死了,天祺鸽鸽诚不欺我!


  • A

这题标程是前几天ACM赛的双栈背包……

然而可以排序之后直接背包,\(O(nm)\)随便过(


  • B

菜 swk 菜

发现答案就是子串中最长border,即串长减去最短循环节。

每个字母是独立的,可以分开计算答案。

对第\(i\)个字母,设循环节循环次数为\(k\),在循环节内的长度为\(f_i\),剩余的长度为\(g_i\),则存在\(f_i\cdot k+g_i=c_i\),此时\(i\)对答案的贡献为\(f_i (k-1)+\min(f_i,g_i)\)。

\(40pts:\)

有一个假做法在\(n=2\)时是对的,但是陈主力也不知道为什么。

考虑枚举\(k\)。直觉想到可以贪心地令\(f_i\)最大,即\(f_i=\lfloor\frac{c_i}k\rfloor\)。

然而在\(n>2\)时就会出锅。

反例大概是\(k\leq 3\)时,贪心的使\(f_i\)最长,会因为第一个循环节被剪掉导致答案变小。

\(70pts:\)

仍然要枚举\(k\),但是需要确定\(f_i\)的最优取值。

分两种情况讨论:\(f_i< g_i\)和\(f_i\geq g_i\)。

第一种情况,\(ans=f_i\cdot k\),即\(f_i<g_i\)时,\(f_i\)越大越优。

此时有\(f_i<g_i=c_i-f_i\cdot k\),移项得\(f_i\cdot (k+1)<c_i\),即\(f_i=\lfloor\frac{c_i}{k+1}\rfloor\)时最优。

第二种情况,\(ans=f_i\cdot (k-1)+g_i\)。

考虑在保持\(f_i\geq g_i\)的情况下,令\(f'_i=f_i-1\),则\(g'_i=c_i-f'_i\cdot k=c_i-(f_i-1)\cdot k=g_i+k\),代入上式得\(ans'=(f_i-1)\cdot (k-1)+g_i+k=f_i\cdot (k-1)+g_i+1=ans+1\)。

我们惊喜地发现,使\(f_i\)减小之后,\(ans\)增大了。即\(f_i\geq g_i\)时,\(f_i\)越小越优。

此时有\(f_i\cdot(k+1)\geq c_i\),即\(f_i=\lceil\frac{c_i}{k+1}\rceil\)时最优。

枚举\(k\),对每个\(k\)取两个值计算。复杂度\(O(\max(c_i)\cdot n)\)。

\(100pts:\)

发现对于每个有若干互不相交的\([l_i,r_i]\),使得对于任意\(k_i\in [l_i,r_i],j\in [1,n]\),\(\lfloor\frac{c_j}{k_i+1}\rfloor,\lceil\frac{c_j}{k_i+1}\rceil\)的值是相等的。

这启发我们使用整除分块,对每个区间只算一次。由某些数论知识可知,这样的区间最多只有\(O(\sum\sqrt {c_i})\)个。时间复杂度\(O(n\cdot\sum\sqrt{c_i})\)。


  • C

\(10pts:\)

取反、左移、右移。

\(25pts:\)

位运算实现a+b:xor,and,左移\(1\)位,递归即可。

\(40pts:\)

把每一位取出来之后直接加,最多迭代\(6\)次即可。

\(65pts:\)

发现将\(x\) xor \(y\)的最高位提取出来就可以解决。

设\(x\) xor \(y=a\) ,对于\(i\in [1,\log_2 64)\),执行\(a |=(a>>2^i)\)。

如此操作后,\(a\)的最高位以下的位全都赋为了\(1\)。xor一下就好了。

\(80pts:\)

做法类似上个子任务,方向反过来即可。需要卡一卡常数。

\(100pts:\)

发现需要实现\(\min(x,y)\)。

\(\min(x,y)=[x<y]\cdot x+[x\geq y]\cdot y\),发现需要实现一个数乘以\(0/1\)。等价于and上 \(0/2^{64}-1\),用子任务\(4\)的方式解决即可。

原文地址:https://www.cnblogs.com/suwakow/p/11375086.html

时间: 2024-09-29 02:14:16

ZROI 19.08.08模拟赛的相关文章

ZROI 19.08.07模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "正睿从来没有保证,模拟赛的题目必须原创." "文案不是我写的,有问题找喵老师去."--蔡老师 A R爷再次翻车,搞出来了一道六年前的CF题. \(100pts:\) 然而不是原题也很简单,斜率优化板子,单调队列搞一下就完事了. 也可以wqs二分,复杂度可以做到\(O(m\log m)\),\(与\)p\(无关.所以R爷差点把\)p$出到\(10^5\). B 本题乱搞做法非常多,所以R爷动用了权限来

ZROI 19.08.09模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(70pts:\) 维护一个栈,从一侧向另一侧扫描,如果新加入的元素与当前栈顶相同,则出栈,否则进栈.显然一个子串是括号序列,当且仅当栈为空. 枚举起点,暴力模拟即可.复杂度\(O(n^2)\). \(100pts:\) 对于一个右端点,考虑哪些左端点可以和它匹配. 发现所有合法的左端点,两者栈的内容都是相等的,可以Hash判断. 实际上考虑每次加入字符时,只会在末尾变动一次,可以用trie树维护.复杂度\(O(\sigma

ZROI 19.08.04模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "这应该是正睿OI历史上第一次差评破百的比赛." "这说明来正睿集训的人越来越多了." "我很不能理解差评,因为在比赛开始前就有超过\(40\)个差评了." 天祺鸽鸽nb! A "这题标程是线性的,可是为什么没有出\(5\times 10^6\)呢?因为spj要带个\(\log\),这样就T了." \(100pts:\) 打表观察发现有解当且仅当\(\sum k

ZROI 19.08.12模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "我发现问题的根源是大家都不会前缀和."--敦爷 A 敦爷spj写错了,差点把蒟蒻swk送走 \(50pts:\) 考虑不输出方案怎么做.显然是树形dp. 设\(f_{i,j,\{0/1/2\}}\)表示\(i\)的子树中,有\(j\)条链,根节点状态为:\(\{\)没选\(/\)选了向下的一条链\(/\)选了向下的两条链\(\}\)的最优解. 对于一棵子树,开始时只考虑根节点,依次合并每个儿子.合并时需要枚举父亲和儿子

ZROI 19.08.10模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(20pts:\) 枚举操作序列然后暴力跑,复杂度\(O(6^n)\). \([50,80]pts:\) 枚举改成dfs,每层操作后还原.复杂度\(O(3^n)\). 全0或全1可以直接返回. 写法优秀可以过\(80pts\). \(100pts:\) 类似非递归fft的写法,bitrev后可以位运算优化. 最下面四层可以预处理,复杂度\(O(3^{n-4})\). 然后疯狂卡常就完事了( 然而由于swk人菜常数大,明明所有

ZROI 19.08.11模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. dlstql,wsl A \(10pts:\) \(a=100,T=100\),对每个排列构造一个反的,一步到位即可. \(20pts:\) \(a=50\),构造\(1\)和所有元素交换的排列,实现交换\((v,u)\)可以令两者分别与\(1\)交换,选择排序即可. \(40pts:\) \(a=30\),构造前\(25\)个元素与\(1\)交换的排列,另有一个排列交换前\(25\)个与后\(25\)个元素. \(a=20\)时

ZROI 19.08.05模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(21pts:\) 随便枚举,随便爆搜就好了. \(65pts:\) 比较显然的dp,设\(f_{i,j,k}\)表示在子树\(i\)中,两个赞助商分别选了\(j,k\)个的最优解. 对枚举的上下界卡的紧一点,按照树上背包的聚合分析,复杂度是\(O(n^3)\)的,可以通过. \(100pts:\) 观察数据范围可以发现,这题的子树大小限制可以抽象成一个经典的网络流模型. 跑一个最大费用流就好了. 我写丑了,每个点拆了\(5

2019.08.06模拟赛T2

题目大意 已知三个$n$位二进制数$A$,$B$,$C$. 满足: $A+B=C$ 它们二进制位中$1$的个数分别为$a$,$b$,$c$. 求满足条件的最小的$C$. Solution 唉,又是一道随缘猜结论的题,可惜极限数据卡掉了我一个点,开大数组就A了..... 通过打表,我们发现所有的最优解中都有一种情况是$A$的二进制位的$1$是连续一段. 原文地址:https://www.cnblogs.com/ldysy2012/p/11311281.html

[铁一中OI模拟赛]2017.8.19 Day1

T1 小Z的情书 题目链接 思考: 题目主要难度在于旋转后的位置如何,在手写了样例之后不难发现规律. #include <cstdio> #include <cstring> #define up(a,b,c) for(register int c=a;c<=b;++c) #define down(a,b,c) for(register int c=a;c>=b;--c) const int Maxn=1005; int n; bool Map[Maxn][Maxn],

赣南师范学院数学竞赛培训第08套模拟试卷参考解答

1. 设 $A,B$ 为 $n$ 阶方阵, $\rank(A)<n$, 且 $A=B_1\cdots B_k$, 其中 $B_i^2=B_i$, $i=1,\cdots,k$. 试证: $$\bex \rank(E-A)\leq k\sez{n-\rank(A)}. \eex$$ 证明: $$\beex \bea \rank(E-A)&=\rank(E-B_1\cdots B_k)\\ &=\rank(E-B_1+B_1(E-B_2\cdots B_k))\\ &\leq \