模拟11 题解

A. string

类似 HEOI2016排序

排序这道题因为只询问单点最终答案,二分答案,

将小于和大于等于答案的数分别设为0 1,

用线段树维护0 1的排序即可。

算法一:

本题中的1~n变成了0~25(即a~z),单点询问变成了全体询问。

仿照排序那道题的做法,线段树优化桶排序。

维护每个节点每个字符的cnt值,区间查询后区间赋值即可。

然而up和down函数都是$O(26)$的,加上修改操作最多被拆分为26个,

总的复杂度为$O(nlogn26^2)$。

需要卡常。

考场上码出了80分,一次优化成了70,再一次优化成了60。

考后把第一次拿出来,加了快读,卡到了90。

循环展开AC。

算法二(来自DeepinC):

思路同样来自HEOI2016排序。

枚举i,范围为0~25,把大于i的字符设为1,反之设为0。

对于每个枚举,线段树维护桶排序,执行m次操作。

每两次枚举中,最终01串中由1变为0的,就是字符i。

复杂度$O(nlogn26)$然而好像常数巨大,只能卡到70分左右。

算法三(好像是正解):

用26棵线段树。

每棵线段树只维护0 1, 分别表示等于或不等于该字符。

其他同算法一,

总复杂度也为$O(nlogn26)$。

算法四(来自sdfzdky):

维护线段树的每个节点是否全部相等,

如果是则直接返回区间大小,否则继续递归。

排序过程同算法一。

根据均摊的思想,复杂度是对的。

最差情况下$O(nlogn26)$,然而在随机数据下很优秀。

算法五(来自cbx):

将连续的同一字符区间看作同一个元素。

暴力桶排序。

复杂度似乎也是对的。

B. matrix

考试时打了状压。

正解:

(右侧区间为由右端点m开始的区间,即$[r[i],m]$,左侧区间同理)

定义$f[i][j]$表示考虑前i列,前i列中有j列在右侧区间放1,已经考虑结束端点小于等于i的左侧区间

状态定义很奇怪,但是是可以转移的。

定义$lp[i]$表示前缀和,$lp[i]$的含义是有多少个左侧区间已经在i点结束。

同理$rp[i]$的含义是i点有多少个右侧区间能放1。

$f[i][j]=f[i-1][j]+f[i-1][j-1]*(r[i]-j+1)$

加号前面的内容表示这个点不在右侧区间放1,

后面的内容表示由可以放1的任何一个右侧区间在这里放1。

转移后,考虑左侧区间。

$f[i][j]*=A_{i-j-l[i-1]}^{l[i]-l[i-1]}$。

$f[m][n]$就是答案。

C. big

考试时打了显然的暴力。

原文地址:https://www.cnblogs.com/skyh/p/11286749.html

时间: 2024-11-06 13:32:43

模拟11 题解的相关文章

模拟11题解

T1[A. string]「桶排序」「线段树」 线段树维护区间的每个字母出现了多少次, 在排序的时候,先查询一个区间的每个字母的出现次数,然后挨个区间赋值 复杂度  $O(mlog(n)*26)$ 优化常数(26):定义f(懒标记):f!=0时,代表子树都被赋值为了同一个值;f==0,表示不相等. 将区间查询改为只有访问到了f!=0再对ans贡献return,pushup,pushdown同理,避免了枚举26 当然也可以循环展开勉强卡过 1 #include<iostream> 2 #incl

省选模拟11 题解

A. 组合数问题 还没想明白如何做,待补. B. recollection 因为原图为trie树,树上两个点的lcp长度等于两个点的lca深度. 考虑通过广义sam来维护两个点的lcs. 树上同时对应着一个$endpos$,树上两个点对应的$endpos$对应的广义sam上节点在后缀树的lca的$len$即为两个点的lcs长度. 所以对于原树上每个点,我们只关注它的子树在后缀树上能形成的$len$最大的lca. 树上$n$个点形成的lca集合,实际上等于dfs序上相邻的两点形成的lca集合. 所

JZOJ4316【NOIP2015模拟11.5】Isfind 题解

JZOJ4316 [NOIP2015模拟11.5]Isfind 题解 Description Input Output Sample Input 4 3    acbc    abc    cba    cc Sample Output Y    N    Y Data Constraint 思路: 题意要看懂,首先声明一下"子串"和"子序列"的区别,S的"子串"意思是在S中选取任意i个(0 < i <= |S|)连续字符组成的字符串

2019.11.11 题解报告

目录 2019.11.11 题解报告 答题情况: 各题目分析: 题目解析: 代码实现: 2019.11.11 题解报告 \[N^2\text{狂草1e5它不香嘛?}\] \[\text{By:Unluckierblock}\] 答题情况: 总成绩 : 169, 排名: 11 / 32 T1 : 0 T2 : 99 T3 : 70 各题目分析: 题目 1 : 预估成绩 : 60 实际成绩 : 0 考试用时 : 8 : 00 ~ 8 : 50 , 9 : 50 ~ 10 : 10 没有什么感觉 ,

HDU 1022 Train Problem I 模拟栈题解

火车进站,模拟一个栈的操作,额外的栈操作,查看是否能按照规定顺序出栈. 数据量很少,故此题目很容易AC. 直接使用数组模拟就好. #include <stdio.h> const int MAX_N = 10; char inOrder[MAX_N], outOrder[MAX_N], stk[MAX_N]; bool rs[MAX_N<<2]; int n; int main() { while (scanf("%d", &n) != EOF) { s

10-4国庆节第七场模拟赛题解

10-4 国庆节第七场模拟赛题解 T1工厂 (factory) 水 #include<iostream> #include<cstdio> #define int long long using namespace std; inline int read(){ int sum=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1; ch=getchar(); } while(ch>='0

2018-10-25 模拟测试题解

目录 问题 A: 魏传之长坂逆袭 题目描述 输入 输出 样例输入 样例输出 题解 问题 B: 蜀传之单刀赴会 题目描述 [问题描述] 输入 输出 样例输入 样例输出 题解 问题 C: 吴传之火烧连营 [题目背景] [问题描述] 输入 输出 样例输入 样例输出 [样例解释] [数据规模和约定] 题解 本篇题解也发表于zwcblog作者是同一个人 问题 A: 魏传之长坂逆袭 题目描述 众所周知,刘备在长坂坡上与他的一众将领各种开挂,硬生生从曹操手中逃了出去,随后与孙权一起火烧赤壁.占有荆益.成就霸业

10月15日模拟赛题解

10月15日模拟赛题解 A 树 Description 给定一棵 \(n\) 个节点的树,每个节点有两个参数 \(a,~b\),对于每个节点,求子树中参数为 \(b\) 的所有节点的 \(a\) 之和 Limitations \(100\%\) \(1 \leq b \leq n \leq 10^5,~a \leq 1000\) \(60\%\) \(1 \leq b,n\leq 1000\) \(30\%\) \(1 \leq b, n \leq 10\) Solution 对于 \(30\%

CPPU程序设计训练营清明天梯模拟赛题解

感谢大家今天来做题 比赛地址:http://202.206.177.79/contest/8 由于博主比较菜,没做完所有题目,这里暂时仅提供前两部分的题解. 为了节约篇幅,题目及数据描述不再赘述,如有需求,请移步OJ查看. 感谢大家的辛苦付出,但是从这次比赛的结果来看,前行之路还非常非常漫长呐. 我寂寞的时候,会害怕踏出第一步.不会想到要去做什么事,所以,可能没有发觉很多很多的东西吧.--<夏目友人帐> 第一阶段 L1-1 天梯赛座位分配 (20分) 通过率:2.56% \(\;\;\) 通过