Harbour.Space Scholarship Contest 2021-2022 题解
多好的上分机会啊,要是换个时间(指改在 NOI 之后)我说不定就能上 2500 了(做白日梦 ing)
A
签到题不多说,显然只有末尾为 \(9\) 的数是 interesting 的,因此答案就是 \(\lfloor\dfrac{n+1}{10}\rfloor\)
B
暴力枚举两个断点然后线性地检查一遍,时间复杂度 \(n^3\)
不知道为什么这种题会有人 FST
C
注意到数据范围很小,因此考虑 \(2^{10}\) 枚举所有状态,然后暴力枚举一下取个 \(\min\) 即可。
D
Weak pretest!!!111/fn/fn
考虑贪心,假设当前 \(s\) 扫到字符 \(s_i\),目前匹配了 \(t\) 的前 \(j\) 位,那么我们暴力跳到下一个等于 \(t_{j+1}\) 且奇偶性与 \(i\) 不同的位置 \(k\) 即可,预处理 \(nxt_{i,j}\) 表示 \(s_i\) 下一个字符 \(j\) 的位置即可实现线性求解。
时间复杂度 \(\mathcal O(26n)\)
注意事项:注意特判最后一个字符的位置与 \(n\) 的奇偶性是否相同,否则会 WA 19。
顺便给出一组 hack 数据:
1
aa
a
要是在现场我就 FST 了(
E
这道题还算有点意思。
首先按照这题的结论(大雾,其实这个结论应该是人尽皆知了吧),对于某个 \(k\) 而言,对于每个 \(p_i\),如果 \(i\le k\),连边 \(p_i\to n-k+i\),否则连边 \(p_i\to i-k\),那么将原排列进行 \(k\) cyclic shift 后变成给定的排列所需的最少步数就是 \(n\) 减去得到的图的置换环的个数。
直接做显然不可行,不过注意到有个条件 \(m\le\dfrac{n}{3}\),这也就意味着在合法的连边方案中至少有 \(\dfrac{2n}{3}\) 个置换环,根据抽屉原理,大小为 \(1\) 的置换环至少有 \(\dfrac{n}{3}\) 个,因此我们考虑对于每个 \(k\),计算在对原排列进行 \(k\) cyclic shift 后得到的排列与给定排列连成的图中有多少个大小为 \(1\) 的置换环,然后对该数目 \(\ge\dfrac{n}{3}\) 的 \(k\) 暴力检验即可,显然检验的 \(k\) 的数目是 \(\mathcal O(1)\) 级别的,因此总复杂度也是线性的。
tbh 我感觉这题比 F 难,可能是因为我做这种人类智慧题不太行罢。。。
F
简单题,现场很快就想出来了可惜由于要睡觉没时间写了
首先咱们肯定要对于每个新加进来的 \(a_i\) 计算它与前面所有 \(a_j\) 取模得到的余数的和呗。那咱肯定就要分为两部分,\(\sum\limits_{j=1}^{i-1}a_i\bmod a_j\) 和 \(\sum\limits_{j=1}^{i-1}a_j\bmod a_i\) 分别求和。首先考虑第一部分,注意到 \(a_i\bmod a_j=a_i-\lfloor\dfrac{a_i}{a_j}\rfloor·a_j\),因此 \(\sum\limits_{j=1}^{i-1}a_i\bmod a_j=\sum\limits_{j=1}^{i-1}a_i-\lfloor\dfrac{a_i}{a_j}\rfloor·a_j\),我们建一个树状数组 \(T_1\),考虑在前面每加入一个 \(a_j\),就在 \(T_1\) 上 \(a_j,2a_j,3a_j,\cdots\) 的位置上 \(+a_j\),那么 \(T_1\) 中 \([1,a_i]\) 部分的前缀和就是 \(\sum\limits_{j=1}^{i-1}\lfloor\dfrac{a_i}{a_j}\rfloor·a_j\),然后就有手就行了。其次考虑第二部分,我们考虑枚举 \(a_i\) 的倍数 \(ka_i\),那么对于 \(a_j\in[ka_i,(k+1)a_i),\lfloor\dfrac{a_j}{a_i}\rfloor=k\),因此我们另件两个树状数组 \(T_2,T_3\) 维护区间和和区间内数的个数,然后每次在树状数组中查询满足 \(a_j\in[ka_i,(k+1)a_i)\) 的 \(a_j\) 的和 \(s\) 及 \(a_j\) 的个数 \(c\),答案加上 \(s-ck\) 即可。
时间复杂度 \(n\log^2n\),但由于常数小+TL 大可以通过,实测 4s 时限不到 1s 就跑过去了。。。
G
一道挺有意思的题,感觉这场最有含金量的题是 E 和 G(
首先考虑一个最 trivial 的情况,怎样判断两个点是否在一个连通块中。考虑这样一个过程:将所有 \(a_i\) 分解质因数,然后将所有质因子看作一个点,那么对于每个 \(a_i\) 将 \(a_i\) 所有质因子合并成一个连通块,检验时只需检验两点是否在一个连通块中即可。
接下来考虑原问题,注意到一个性质,就是最多两次操作就可以搞定:如果两个数都是偶数那直接不互质在一个连通块中,如果两个数一奇一偶那最多只需把奇数扩展一下就能连通,如果两个数都是奇数那最多只需把两个奇数分别扩展一下就能连通。因此我们只需再检验一次操作能否搞定,如果不能答案就是 \(2\)。怎么检验呢?我们考虑每个连通块进行一次扩展能与哪些连通块连通,我们枚举每个数 \(a_i\),那么显然扩展 \(a_i\) 后会使 \(a_i\) 与 \(a_i+1\) 所有质因子合并,用个 set 维护一下即可,复杂度 \(\omega^2(n)n\log n\),然鹅比 wjz \(n\log n+49n\) 跑得还快。。。((
H
降智了没想出来/ll,然鹅看了题解后感觉不是太难(
考虑对 \(a_i\) 建立一个 \(01\)-trie,与普通的 \(01\)-trie 不同的是,该 \(01\)-trie 与线段树有着类似的结构,每个节点表示一个区间 \([L,R]\) 并维护以下四个值:
- 在区间 \([L,R]\) 中出现的最小的数 \(-L\)
- 在区间 \([L,R]\) 中出现的最大的数 \(-L\)
- 区间 \([L,R]\) 中最接近的两个数的差
- 区间 \([L,R]\) 的长度 \(R-L+1\)
那么对于某个 \(k\) 而言,其答案就是对于所有 \(b\) 满足 \(k\) 的 \(2^b\) 位为 \(1\),将 \(01\)-trie 自下而上的第 \(b+1\) 层所有节点的左右儿子交换后,根节点的答案。直接换显然工作量太大,稳稳地 T 掉。不过注意到本题的 01-trie 与线段树一样有一个性质,那就是所有节点表示的区间的长度之和是 \(2^kk\) 级别的,因此考虑对所有节点开一个长度 \(R-L+1\) 的数组,第 \(x\) 位表示将该区间中的所有数异或 \(x\) 后该节点上的信息,对于每一位显然可以 \(\mathcal O(1)\) 上推信息,因此总复杂度 \(2^kk\)。
const int MAXN=1<<20;
const int INF=0x3f3f3f3f;
int n,k,cnt[MAXN+5];
struct node{
int fst,lst,len,ans;
node(){fst=lst=len=ans=0;}
node(int x){
len=1;ans=INF;if(x) fst=lst=0;
else fst=INF,lst=-INF;
}
node operator +(const node &rhs){
node res;
res.len=len+rhs.len;
res.fst=min(fst,rhs.fst+len);
res.lst=max(lst,rhs.lst+len);
res.ans=min(min(ans,rhs.ans),rhs.fst+len-lst);
return res;
}
};
vector<node> s[MAXN+5];
void build(int k,int l,int r){
s[k].resize(r-l+1);if(l==r) return s[k][0]=node(cnt[l]),void();
int mid=l+r>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);
for(int i=0;i<mid-l+1;i++){
s[k][i]=s[k<<1][i]+s[k<<1|1][i];
s[k][i+(mid-l+1)]=s[k<<1|1][i]+s[k<<1][i];
}
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1,x;i<=n;i++) scanf("%d",&x),cnt[x]++;build(1,0,(1<<k)-1);
for(int i=0;i<(1<<k);i++) printf("%d%c",s[1][i].ans," \n"[i==(1<<k)-1]);
return 0;
}
Harbour.Space Scholarship Contest 2021-2022 题解的更多相关文章
- Harbour.Space Scholarship Contest 2021-2022 (Div. 1 + Div. 2) Editorial题解
A 略,发现只有当末尾为9时才满足条件.. B 简单模拟,注意数组大小!!! C 简单模拟. D 比较暴力的一个做法就是每次找一个开始匹配的起始点,然后每次不同时向后跳2就行了. 注意这里最后还要判断 ...
- CF1553X Harbour.Space Scholarship Contest 2021-2022 (Div. 1 + Div. 2)
掉大分 E 对于一个序列,把它排回去的最小次数是 $\sum置换环大小-1=错位个数-置换环个数$ 注意到m小于等于n/3.那么最多修正2m个错位.正确位置的个数必须大于等于n/3才可能在m次内修正. ...
- KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
- 2018 ACM-ICPC Asia Beijing Regional Contest (部分题解)
摘要 本文主要给出了2018 ACM-ICPC Asia Beijing Regional Contest的部分题解,意即熟悉区域赛题型,保持比赛感觉. Jin Yong’s Wukong Ranki ...
- 2014-2015 ACM-ICPC, Asia Xian Regional Contest(部分题解)
摘要 本文主要给出了2014-2015 ACM-ICPC, Asia Xian Regional Contest的部分题解,说明了每题的题意.解题思路和代码实现,意即熟悉区域赛比赛题型. Built ...
- Comet OJ - Contest #2 简要题解
Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...
- Comet OJ - Contest #2简要题解
Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/ ...
- 300iq Contest 1 简要题解
300iq Contest 1 简要题解 咕咕咕 codeforces A. Angle Beats description 有一张\(n\times m\)的方阵,每个位置上标有*,+,.中的一种. ...
- M-SOLUTIONS Programming Contest 2021(AtCoder Beginner Contest 232) 题解
目录 G - Modulo Shortest Path H - King's Tour 因为偷懒就只写G和H的题解了. G - Modulo Shortest Path 首先可以观察到对于一条从点\( ...
随机推荐
- 微服务网关Ocelot加入IdentityServer4鉴权-.NetCore(.NET5)中使用
Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网关Ocel ...
- repartition导致的广播失败,关于错误Failed to get broadcast_544_piece0 of broadcast_544
今天一个生产环境任务出现了性能问题,,经过仔细检查发现是在一个join操作时,原设定广播右表数据广播失败,导致后续步骤进行缓慢,,报错信息 java.io.IOException: org.apach ...
- Prometheus之告警规则的编写
Prometheus之告警规则的编写 一.前置知识 二.需求 三.实现步骤 1.编写告警规则 2.修改prometheus.yml执行告警规则的位置 3.配置文件截图 4.页面上看告警数据信息 5.查 ...
- 嵌入式物联网之SPI接口原理与配置
本实验采用W25Q64芯片 W25Q64是华邦公司推出的大容量SPI FLASH产品,其容量为64Mb.该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件.W25Q64将8M字节的容量分为 ...
- Linux 系统 Oracle 11g 修改监听端口
1.查看监听:lsnrctl status 2.停止监听:lsnrctl stop 3.修改oracle安装目录的下的配置文件listener.ora:一般路径为自己Oracle安装目录+/app/o ...
- MD5函数(公共方法)
1 #region MD5函数 2 /// <summary> 3 /// MD5函数 4 /// </summary> 5 /// <param name=" ...
- 一次fork引发的惨案!
"你还有什么要说的吗?没有的话我就要动手了",kill程序最后问道. 这一次,我没有再回答. 只见kill老哥手起刀落,我短暂的一生就这样结束了··· 我是一个网络程序,一直以来都 ...
- Appium 介绍与环境搭建
目录 Appium 介绍 APP 自动化测试介绍 什么是 Appium ? Appium 优势 Appium 架构 Appium 生态 Appium 组件 UiAutomator API Bootst ...
- java实现微信分享
之前项目中涉及到了微信分享的功能,然后总结下供有需要的朋友参考下. 在做之前可以先看下<微信JS-SDK说明文档>,大致了解下.我自己的工程目录是 1.HttpService和HttpSe ...
- 测试平台系列(72) 了解ApScheduler基本用法
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们调研了一下市面上 ...