掉大分

E

对于一个序列,把它排回去的最小次数是 $\sum置换环大小-1=错位个数-置换环个数$

注意到m小于等于n/3。那么最多修正2m个错位。正确位置的个数必须大于等于n/3才可能在m次内修正。

每个点正确位置只有一个。那么整个序列最多有3个位置,以它们为开头满足条件。找出这些位置再暴力验证即可

 1 #include <queue>
2 #include <bitset>
3 #include <vector>
4 #include <cstdio>
5 #include <cstring>
6 #include <algorithm>
7 #define ll long long
8 using namespace std;
9 const int maxn=3e5, N1=maxn+5;
10
11 template <typename _T> void read(_T &ret)
12 {
13 ret=0; _T fh=1; char c=getchar();
14 while(c<'0'||c>'9'){ if(c=='-') fh=-1; c=getchar(); }
15 while(c>='0'&&c<='9'){ ret=ret*10+c-'0'; c=getchar(); }
16 ret=ret*fh;
17 }
18
19 int T,m,n;
20 int p[N1],cnt[N1];
21 int a[N1],vis[N1];
22
23 int check(int to)
24 {
25 for(int i=1+to;i<=n;i++) a[i-to]=p[i];
26 for(int i=1;i<=to;i++) a[i+n-to]=p[i];
27 for(int i=1;i<=n;i++) vis[i]=0;
28 int tot=0;
29 for(int i=1,num,x;i<=n;i++)
30 {
31 num=0;
32 if(vis[i]) continue;
33 for(x=i;;x=a[x])
34 {
35 vis[x]=1; num++;
36 if(a[x]==i) break;
37 }
38 tot+=num-1;
39 }
40 return tot<=m;
41 }
42
43 int main()
44 {
45 // freopen("a.in","r",stdin);
46 read(T);
47 while(T--)
48 {
49 read(n); read(m);
50 for(int i=1,x;i<=n;i++)
51 {
52 read(p[i]);
53 x=i-p[i]; if(x<0) x+=n;
54 cnt[x]++;
55 }
56 int ans=0, pos[3]={0,0,0}, fl;
57 for(int i=0;i<n;i++) if(cnt[i]>=n/3)
58 {
59 fl=check(i);
60 if(fl) pos[ans++]=i;
61 }
62 printf("%d ",ans);
63 for(int i=0;i<ans;i++) printf("%d ",pos[i]);
64 puts("");
65 for(int i=1;i<=n;i++) cnt[i]=0;
66 }
67 return 0;
68 }

F

此题应用了一个经典的换掉mod的方法:
$$
a\ mod\ b=a-\lfloor \frac{a}{b} \rfloor b
$$
我们把式子拆分一下,让问题变得有序
$$
p[k]=f[k]+g[k]\\
$$

$$
f[k]=\sum_{i,j\le k,j<i}a[i]\ mod\ a[j] \\
=f[k-1]+\sum_{i=1}^{k-1}a[k]\ mod\ a[i] \\
=f[k-1]+\sum_{i=1}^{k-1}a[k]-\lfloor \frac{a[k]}{a[i]} \rfloor a[i] \\
=f[k-1]+(k-1)a[k]-\sum_{i=1}^{k-1}\lfloor \frac{a[k]}{a[i]} \rfloor a[i]
$$

最后一项与前面的a[i]有关,我们从左往右处理,相当于每次向序列末尾推进一个a[k],接着计算它的贡献。a[i]会对a[k]在每隔ai的一段连续区间产生相同的贡献。对$[0,a[i])$产生0点,对$[a[i],2a[i])$产生a[i]点贡献。。。

我们需要区间修改,单点查询,上线段树

注意题目中的关键条件$a[i]\ne a[j]$,满足调和级数,那么即使我们暴力修改,也最多修改$O(mlogm)$个连续区间

接着处理剩下的一部分贡献
$$
g[k]=\sum_{i,j\le k,j<i}a[j]\ mod\ a[i] \\
=g[k-1]+\sum_{i=1}^{k-1}a[i]\ mod\ a[k] \\
=g[k-1]+\sum_{i=1}^{k-1}a[i]-\lfloor \frac{a[i]}{a[k]} \rfloor a[k] \\
=g[k-1]+\sum_{i=1}^{k-1}a[i]-\sum_{i=1}^{k-1}\lfloor \frac{a[i]}{a[k]} \rfloor a[k]
$$
还能用和上面相同的方法处理吗?答案是否定的,我们要对后面的式子**整除分块**计算贡献,而每次整除分块的复杂度是$O(\sqrt{m})$,修改的区间个数是$O(m\sqrt{m})$,应该会被卡

考虑讨论$\lfloor \frac{a[i]}{a[k]} \rfloor$的取值,在$[0,a[k])$之间是0,在$[a[k],2a[k])$之间是1。。。

对每个区间查询$a[i]$的和以及$a[i]$的出现次数!区间个数满足调和级数,也是$O(mlogm)$的

单点修改,区间查询,上线段树

总复杂度$O(mlogmlogn)$

CF1553X Harbour.Space Scholarship Contest 2021-2022 (Div. 1 + Div. 2)的更多相关文章

  1. Harbour.Space Scholarship Contest 2021-2022 (Div. 1 + Div. 2) Editorial题解

    A 略,发现只有当末尾为9时才满足条件.. B 简单模拟,注意数组大小!!! C 简单模拟. D 比较暴力的一个做法就是每次找一个开始匹配的起始点,然后每次不同时向后跳2就行了. 注意这里最后还要判断 ...

  2. Harbour.Space Scholarship Contest 2021-2022 题解

    多好的上分机会啊,要是换个时间(指改在 NOI 之后)我说不定就能上 2500 了(做白日梦 ing) A 签到题不多说,显然只有末尾为 \(9\) 的数是 interesting 的,因此答案就是 ...

  3. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解

    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...

  4. Codeforces Round #792 (Div. 1 + Div. 2) A-E

    Codeforces Round #792 (Div. 1 + Div. 2) A-E A 题目 https://codeforces.com/contest/1684/problem/A 题解 思路 ...

  5. CF Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)

    1. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort    暴力枚举,水 1.题意:n*m的数组, ...

  6. xHTML+div布局:三个div,两边div宽度固定,中间div宽度自适应

    xHTML+div经常考题:三个div,两边div宽度固定,中间div宽度自适应. 和大家分享一个实现方式: 1.html代码 <div class="dyleft"> ...

  7. getElementsByTagName("div")和$("div")区别

    作者:zccst <body> <div class="selected">1</div> <div class="select ...

  8. 【codeforces】【比赛题解】#868 CF Round #438 (Div.1+Div.2)

    这次是Div.1+Div.2,所以有7题. 因为时间较早,而且正好赶上训练,所以机房开黑做. 然而我们都只做了3题.:(. 链接. [A]声控解锁 题意: Arkady的宠物狗Mu-mu有一只手机.它 ...

  9. Codeforces 1023 A.Single Wildcard Pattern Matching-匹配字符 (Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Fi)

    Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) A. Single Wildcard Patter ...

随机推荐

  1. Solution -「AGC 019F」「AT 2705」Yes or No

    \(\mathcal{Description}\)   Link.   有 \(n+m\) 个问题,其中 \(n\) 个答案为 yes,\(m\) 个答案为 no.每次你需要回答一个问题,然后得知这个 ...

  2. 第8章 File I/O,File类操作文件的属性

    1.文件 1.1.什么是文件? 答:文件可认为是相关记录或放在一起的数据的集合 1.2.文件- -般存储在哪里? 答: 磁盘,硬盘,文件夹 1.3.JAVA程序如何访向文件属性? JAVA API:i ...

  3. keepalived健康检查及双主MySQL健康检查脚本

    一.http检查 HTTP_GET:工作在第5层,向指定的URL执行http请求,将得到的结果用md5加密并与指定的md5值比较看是否匹配,不匹配则从服务器池中移除:此外还可以指定http返回码来判断 ...

  4. kafka在linux下安装

    简介 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 相关术语(参考百度百科) Broker Kafka集群包含一个或多个服务器,这种服务器被称为brok ...

  5. 网络主动测评系统,IT网络运维管理的法宝!

    随着计算机网络的普及和快速发展,互联网已经融入到人们的衣食住行等方方面面,如工作.购物.音视频聊天.视频会议.朋友圈.抖音.在线网游.网络电影电视等.毫不夸张地说,现如今大部分人的绝大多数时间都已经离 ...

  6. 2021年国内BI厂商推荐_大数据分析工具

    随着互联网大数据时代的不断发展,BI让企业的工作效率变得更高效.BI的功能也随着需求的增长不断地丰富,例如,数据可视化大屏.可视化表格.商业化数据分析.数据地图等.国外的厂商在很多场景下无法满足国内的 ...

  7. kibana操作记录

    GET _search { "query": { "match_all": {} } } GET _cat/nodes GET _cat/health GET ...

  8. JVM学习笔记(详细)

    目录 01 JVM与Java体系结构 简介 JVM整体架构,HotSpot java代码执行流程 JVM架构模型 JVM生命周期 JVM发展历程 02 类加载子系统 JVM细节版架构 类加载器的作用 ...

  9. mongodb之shard分片

    总的 1:在3台独立服务器上,分别运行 27017,27018,27019实例, 互为副本集,形成3套repl set 2: 在3台服务器上,各配置config server, 运行27020端口上 ...

  10. Qt:QFileInfo

    0.说明 QFileInfo提供了独立于系统的文件信息. QFileInfo提供的信息包括文件名.路径.访问权限.文件大小.修改时间等.此外,它也可以用于获取有关Qt 资源的信息(resource). ...