传送门 题解 做法与题解基本无异,不过他说用vector我觉得用链表来得更好一些. #include<queue> #include<ctime> #include<bitset> #include<vector> #include<cstdio> #include<algorithm> #define MN 110000 using namespace std; int read_p,read_ca,read_f; inline i…
题解: 搞这题搞了一天 思维不是很难 就是暴力压位bitset 分块做法速度更快 但是stl里的不能实现这个功能 所以手动实现 64位压一位 到65535跑一下1的个数 然后(x>>16)&65535+...计算出1的个数 眼查错果然还是不靠谱以后还是写对拍吧 另外的难点在于这题很卡空间 我们建立dfs树 这样把总空间变为最大消耗空间 合并bitset的时候我们利用启发式合并 并且bitset只存出现了的位置 就是那些64位都没有出现的就不存了 空间是nlogn的,但是还是挺卡的吧 使…
数学上来先打表 SRM 10 描述 给出 n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案:1.每条边连接两个不同的点,每两个点之间至多有一条边2.不存在三个点a,b,c使三个点间两两可以互相到达且两两之间最短距离相等3.边的长度均为1 输入格式 一行,一个整数n 输出格式 一行,一个整数,表示方案数对1004535809取模的结果. 样例输入 3 样例输出 7 数据范围与约定 对于8组数据,1<=n<=9对于余下8组数据,10<=n<=2000 样例解释 三个点之…
[算法]DP+数学计数 [题意]给出n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案(对1004535809取模): 1.每条边连接两个不同的点,每两个点之间至多有一条边. 2.不存在三个点a,b,c使三个点间两两可以互相到达且两两之间最短距离相等. 3.边的长度均为1. n<=2000 [题解] p[i]表示i个点形成联通块的满足条件的方案数. 如果i个点形成链,则一定是直链,如果有分支则一定不满足条件,如此有n!/2种方案(排列,正反算一种) 如果i个点形成环,则一定是i-1…
建立操作树,即1和3操作时i-1向i连边,2操作中k向i连边,然后dfs一遍 那么当我们走到一个节点,就执行该操作(修改也是操作),退出后取消该操作即可 于是相当于要维护一个东西,支持:1.加边:2.删边:3.询问联通块的第k小 容易想到按秩合并并查集,考虑询问操作:用分块,维护每一个权值块的权值数量(要离散) 然后就可以确定答案所在权值块,再依次枚举里面的权值并判断是否在联通块内即可 1 #include<bits/stdc++.h> 2 using namespace std; 3 #de…
LibreOJ β Round #2 题解 模拟只会猜题意 题目: 给定一个长为 \(n\) 的序列,有 \(m\) 次询问,每次问所有长度大于 \(x\) 的区间的元素和的最大值. \(1 \leq x \leq n \leq 10^4,m \leq 10^5,|A_i| \leq 10^4\) 题解: 因为 \(n \leq 10^4\) ,所以暴力. #include <cstdio> #include <cstring> #include <algorithm>…
[LOJ#531]「LibreOJ β Round #5」游戏 试题描述 LCR 三分钟就解决了问题,她自信地输入了结果-- > -- 正在检查程序 -- > -- 检查通过,正在评估智商 -- > 对不起,您解决问题的速度过快,与加密者的智商不符.转入精确匹配. > 由于您在模糊匹配阶段的智商差距过大,需要进行精确匹配. LCR 发现,精确匹配是通过与随机对手(称为「神犇」)游戏的方式,藉由游戏的决策来评定智商的机制.游戏规则如下: 有一个长为 \(n\),下标为 \([1,n]…
[LOJ#530]「LibreOJ β Round #5」最小倍数 试题描述 第二天,LCR 终于启动了备份存储器,准备上传数据时,却没有找到熟悉的文件资源,取而代之的是而屏幕上显示的一段话: 您的文件存在被盗风险,为安全起见,您需要通过「智商·身份验证 ver. 5.0 β 版」的验证,以证明您是资料的主人.请写一个程序解决下述问题: 给定 \(p\),求最小的正整数 \(n\),使得 \(n! mod p = 0\). 由于 \(p\) 很大,输入将给出 \(m\) 和 \(e_1, e_2…
[LOJ#516]「LibreOJ β Round #2」DP 一般看规律 试题描述 给定一个长度为 \(n\) 的序列 \(a\),一共有 \(m\) 个操作. 每次操作的内容为:给定 \(x,y\),序列中所有 \(x\) 会变成 \(y\). 同时我们有一份代码: int ans = 2147483647; for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n; j++) { if (a[i] == a[j]) ans = s…
[LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. 设 \(S=\sum{x_i^2}​​\) ,求 \(S\) 种类数. 输入 第一行一个数 \(n\). 然后 \(n\) 行,每行两个数表示 \(a_i, b_i\). 输出 输出一行一个数表示答案. 输入示例 5 1 2 2 3 3 4 4 5 5 6 输出示例 26 数据规模及约定 \(1 \…