考场 开考感觉 T3 比较可做.T1 看上去不难但毫无思路. 先想了 25min T3,想到一个确定左端点,二分最长的右端点,甚至想到了用猫树维护区间 or and...上厕所回来发现假了,没有单调性 T1 还是不会做,T2 甚至不会写暴力.直到 8.10 才结束思考. T1 暴力有 80pts,先写了 继续看 T3,根据区间变大后四个变量的变化情况想到了分治,又是想了很久发现复杂度假了,心态就炸了.这时候已经 9.20 了,洗了把脸强行冷静,写了 T3 暴力,但状态很差,写错很多细节. 最后…
A. Dove 打扑克 考场思考半天线段树树状数组,没有什么想法 打完暴力后突然想到此题用链表实现会很快. 因为只有$n$堆,所以设最多有$x$个不同的堆数,那么$x\times (x-1)/2==n$, 所以链表中最多有$\sqrt{n}$个元素, 所以可以用一个$set$维护当前的出现元素,每次$upper\_bound$找到合适位置插入链表, 因为当前元素有序所以可以统计链表后缀来求答案 知识点: 不要在T1花太长时间,数据结构题可能只用到一些简单数据结构 B. Cicada 与排序 很好…
题目传送门(内部题93) 输入格式 第一行一个整数$n$,代表数列的长度. 接下来一行$n$个数$a_i$,用空格分隔开. 输出格式 输出一行$n$个数,表示原数列上这个位置在执行后的期望位置,注意输出的是期望值在$\mod 998244353$下的结果. 数据范围与提示 $n\leqslant 500,1\leqslant a_i\leqslant 10^3$ 题解 考虑$DP$,设$dp[i][j][k]$表示在第$i$层下原来的$j$在现在排名为$k$的概率,发现还是不好转移. 再设$g[…
题解 \(by\;zj\varphi\) 设 \(rk_{i,j}\) 表示第 \(i\) 个数最后在相同的数里排第 \(j\) 位的概率. 转移时用一个 \(dp\),\(dp_{i,j,0/1}\) 表示归并排序时第一个数组弹了 \(i\) 个,第二个数组弹了 \(j\) 个,最后一个弹的是第一个数组的还是第二个的. 直接模拟归并排序,然后在过程中枚举值域即可. Code #include<bits/stdc++.h> #define Re register #define ri regi…
题目描述 $Dove$和$Cicada$是好朋友,他们经常在一起打扑克来消遣时光,但是他们打的扑克有不同的玩法. 最开始时,牌桌上会有$n$个牌堆,每个牌堆有且仅有一张牌,第$i$个牌堆里里里那个扑克牌的编号为$i$,任意两张牌仅有标号不不同.游戏会进行$m$轮,每轮$Dove$可以执行行下列操作之一: $\bullet 1\ x\ y$,将编号为$x,y$的牌所在的牌堆合并,如果此时$x,y$已在同一牌堆中,那么不进行任何操作. $\bullet 2\ c$,询问有多少对牌堆的牌数之差不少于$…
题目描述 分析 这道题比较关键的一点就是要看出最终牌数的种类数不会超过 \(\sqrt{n}\) 种 知道了这个性质我们就可以用 \(vector\) 维护一个有序的序列 \(vector\) 中存放牌数的大小和有多少堆这样的牌 每次二分插入和删除即可 时间复杂度 \(O(m\sqrt{n})\) 代码 #include<cstdio> #include<vector> #define rg register inline int read(){ rg int x=0,fh=1;…
题解 \(by\;zj\varphi\) 引理 对于一个和为 \(n\) 的数列,不同的数的个数最多为 \(\sqrt n\) 证明: 一个有 \(n\) 个不同的数的数列,和最小就是 \(n\) 的排列时 \(\frac{n(n+1)}{2}\),是 \(\sqrt n\) 级别的. 那么,直接用 \(set\) 维护一下有多少不同的堆数,再记一个桶维护每种数的堆有多少个,询问时直接二分查找即可. 复杂度 \(\mathcal O\rm(q\sqrt nlogn)\) Code #includ…
传送门 考场上觉得复杂度是假的就没怎么优化,然后考完题解帮我证明了它是真的-- 首先合并可以用并查集维护,可以顺便维护出集合的大小 对于操作2,发现如果 \(size_i\) 是确定的,可以用权值线段树很方便的维护出合法的 \(size_j\)的个数 每次只需枚举出现过的 \(size_i\) 即可,所以我觉得复杂度是假的 如果存在 \(\sum a_i = n\) ,那么有 \(diff \{a_i\} \leqslant \sqrt n\) 我们有 \(\sum size_i = n\) ,…
选择排序 选择排序,一般我们指的是简单选择排序,也可以叫直接选择排序,它不像冒泡排序一样相邻地交换元素,而是通过选择最小的元素,每轮迭代只需交换一次.虽然交换次数比冒泡少很多,但效率和冒泡排序一样的糟糕. 选择排序属于选择类排序算法. 我打扑克牌的时候,会习惯性地从左到右扫描,然后将最小的牌放在最左边,然后从第二张牌开始继续从左到右扫描第二小的牌,放在最小的牌右边,以此反复.选择排序和我玩扑克时的排序特别相似. 一.算法介绍 现在有一堆乱序的数,比如:5 9 1 6 8 14 6 49 25 4…
csp-s模拟测试91 倒悬吃屎的一套题. $T1$认真(?)分析题意发现复杂度不能带$n$(?),计划直接维护答案,考虑操作对答案的影响,未果.突然发现可以动态开点权值线段树打部分分,后来$Tm$一想这不傻逼开个桶吗所以暴力维护只拿了一个部分分.$T2$ $qnmd$ $sb$期望老子不会. $T3$哎$ST$表怎么打来着我忘了(?).自闭到考试结束. 02:56:12 0 02:56:27 02:57:10 89 02:57:10 哎?我对$T2$充满信仰出题人你的良心数据去哪了? A. D…