首页 > TAG信息列表 > LibreOJ
LOJ#535「LibreOJ Round #6」花火 题解
题面 如果只能交换相邻两项,那么答案就是排列的逆序对数。 现在我们就是要求交换两个数,使得交换后的排列逆序对数最少。 不难发现我们一定不会交换满足 \(i<j,h_i<h_j\) 的 \((i,j)\),因为这样只会让逆序对变多。 考虑怎么刻画减少的逆序对: \((i,j)\); 满足 \(i<k<j,h_k<h_i\) 的 \(端午节做题记录
前言 艹原来本来十六点就写好了,突然洛谷的博客功能不能全选了,一Ctrl+A就tm内容全没,调了半天,还得从写啊啊啊。 然后还看到一个退役的高二学长回关我了,,,55555好感动 目录 P2417 课程 P3722 [AH2017/HNOI2017] 影魔 P4568 [JLOI2011] 飞行路线 P4495 [HAOI2018] 奇怪的背包 P4728 [HNLibreOJ 10011 愤怒的牛 二分
农夫约翰建造了一座有 \(n\) 间牛舍的小屋,牛舍排在一条直线上,第 \(i\) 间牛舍在 \(x_i\) 的位置,但是约翰的 \(m\) 头牛对小屋很不满意,因此经常互相攻击。约翰为了防止牛之间互相伤害,因此决定把每头牛都放在离其它牛尽可能远的牛舍。也就是要最大化最近的两头牛之间的距离。 牛们并LibreOJ 131 树状数组2:区间修改,单点查询
题目地址 Solution 前面已经知道了树状数组的单点修改和区间查询。这里利用差分的思想:具体来说,维护 \(b\) 数组: \[b[i] = a[i]-a[i-1] \]其中 \(a\) 为原来数组。可以发现 \[a[i] = \sum_{k=1}^ib[k] \]因此我们只需要对 \(b\) 利用树状数组维护,get_sum[i]即可得到原来数组单点的Libreoj 6279. 数列分块入门 3
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N=1e5+5; 5 vector<ll>v[N]; 6 ll a[N],tag[N],blg[N],L[N],R[N],block,tot; 7 void resort(int n) 8 { 9 v[n].clear(); 10 for(int i=L[n];i<=R[n]【DS】loj#535. 「LibreOJ Round #6」花火
题传 真难写,, 考虑冒泡排序,每一次交换相邻的减少 1 对逆序对,那么我们肯定要第二种操作尽量多地减少逆序对。 考虑第二种操作 swap(i,j) 减少的逆序对数量:\(\forall k\in(i,j),h_j<h_k<h_i\),\(k\) 的个数乘二。 考虑抽象到二维平面,点坐标为 \((i,h_i)\),那么就是以 \((i,h_i)\) 为左LibreOJ 130 树状数组1:单点修改,区间查询
题目链接:LibreOJ 130 树状数组1:单点修改,区间查询 题目大意: 题解: 树状数组模板,注意要开\(long\) \(long\)。 #include <iostream> #include <cstring> using namespace std; long long bit[1000010]; int n, q, act, l, r; int lowbit(int x) { return x & (-x); } void updateLibreOJ 109 并查集
题目链接:LibreOJ 109 并查集 题目大意: 题解: 并查集模板,结果用二进制表示,注意要快读。 #include <cstdio> #include <iostream> using namespace std; int fa[4000010], ans; inline int read() { char ch = getchar(); int ans = 0, f = 1; while (ch < '0' || cLibreOJ 2421 信息传递
题目链接:LibreOJ 2421 信息传递 题目大意: 题解: 建立传递者和接收者的单向边,加边的同时判断是否成环,记录环的大小并更新最小值。 #include <iostream> using namespace std; int n, fa[200010], ans = 0x3f3f3f3f, cnt, x; int get(int x) { cnt++; return fa[x] == x ?[LibreOJ - 2150] 最大子矩阵 (dp)
[LibreOJ - 2150] 最大子矩阵 题目链接 大致题意: 在 n ∗ m n*m n∗m的矩阵中,选出 kLOJ-572 「LibreOJ Round #11」Misaka Network 与求和
Description 给定 \(N,k\),求: \[\sum_{i=1}^N\sum_{j=1}^N (f(\gcd(i,j)))^k \]其中 \(f(x)\) 表示 \(x\) 质因子分解结果中次大的质因子,重复的质因数计算多次。 Constraints \(1\le N,k\le 2\cdot 10^9\) Solution 记 \(f_k(x)=(f(x))^k\)。推式子: \[\begin{aligned} \sum_{i}^N\s<题解>「LibreOJ NOIP Round #1」序列划分
solutions 题面loj#542 对我来说,这或许已经超出了我的能力,我,只能看题解 不知道我写完这一篇题解之后,会不会对我的构造题有一点点的帮助 让我在这类题的解决上能过有一些提升 直接说明白,这就是一个构造题 这个很好判断,因为有SPJ,并且方案有很多,随便输出就可以 开头是K,结尾是K,长度也[LOJ521]「LibreOJ β Round #3」绯色 IOI(抵达)
壹、题目描述 ¶ 传送门 to LOJ. 贰、题解 ¶ 我们试图构造一些小的方案,发现一个特性: 合法方案,总是两个点互相为对方的避难节点; 这个结论并不难证明,由于最后是一棵树,故而没有环,而若不是相互避难,总有一个点找不到避难节点。 所以,对于是否有解,我们可以简单地判断一下,这个树是否存LibreOJ 10148 能量项链
题目链接:LibreOJ 10148 能量项链 题目大意: 题解: 一道典型的区间\(dp\)题。 状态转移方程: \[dp[i][j] = max\{dp[i][j], dp[i][k] + dp[k + 1][j] + a[i] * a[k + 1] * a[j + 1]\},i\leq k < j \]#include <iostream> using namespace std; #define ll long long #define N 1010图论专题100题之:「LibreOJ β Round #4」子集(二分图+基础数论)
题目传送门 前置知识: 二分图匹配,基础数论 题意: 给定 n n n个数,选出最大的子集,使得满足子集中的任意两个元素满足: g c【单调队列优化DP】烽火传递 LibreOJ - 10180
题目来源 点我进入提交题目 反思 因为目前在学习单调队列优化DP,所以会往单调队列上面想。然后犯了一个错误就是,认为这个题目只要用单调队列就可以完成,单调队列只是用来减少时间复杂度的,遇到了求最优解的题目,最先要想到的还是贪心和DP。 题解 分析题目 n 个烽火台,连续m个烽火LibreOJ #10046
Description 两个字符串 \(A\) 和 \(B\),若 \(A\) 是 \(B\) 的前缀且 \(A\ne B\),则称 \(A\) 是 \(B\) 的 proper 前缀。 两个字符串 \(C\) 和 \(D\),若 \(C\) 是 \(D\) 的 proper 前缀且 \(D\) 是 \(CC\) 的前缀,则称 \(C\) 是 \(D\) 的周期。 给出一个字符串,求它的所有前缀的最大周LOJ#515. 「LibreOJ β Round #2」贪心只能过样例(bitset)
内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: nzhtl1477 提交提交记录统计讨论测试数据 题目描述 一共有 nnn个数,第 iii 个数 xix_ixi 可以取 [ai,bi][a_i , b_i][ai,bi] 中任意值。 设 S=∑xi2SLOJ#572. 「LibreOJ Round #11」Misaka Network 与求和
IV.LOJ#572. 「LibreOJ Round #11」Misaka Network 与求和 首先先考虑莫反推一波式子。 \[\begin{aligned}&\sum\limits_{i=1}^n\sum\limits_{j=1}^nf^k\Big(\gcd(i,j)\Big)\\=&\sum\limits_{d=1}^nf^k(d)\sum\limits_{i=1}^n\sum\limits_{j=1}^n[\gcd(i,j)=d]\\=&a【LibreOJ NOIP Round #1】数列递推
这要是ACM题又是一道自闭题。。。。。。 原题: 把an表示为p*a0+q*a1的形式,手玩前几项发现不难证明a1系数永远大于a0且越来越大 所以只要这俩别全0,整个数列的走向一定是这样的: 波动->出现相邻同号->起飞 原因很显然,由于a1系数越来越大,所以当n趋向于无穷时a1的符号比a0占优势【LibreOJ NOIP Round #1】DNA 序列
思维定势太强,脑洞不够大囧 原题: n<=5e6,k<=10 第一眼看:26进制表示连续的k个碱基,由于k能到10所以离散化一下 一看数据:n是5e6???这离散化必然会被卡 思考一下:会不会是loj跑太快了出题人要卡做法才出这么极限 我觉得不太可能,就没去写,怎么都想不到做法 第二天:字母只有四种,可能数字转换 LibreOJ - 10155
原题链接 考察:树形dp+约数 思路: 预处理约数之和,用倍数法,时间复杂度10^6次方左右,sum[i]<i的建立边.通过打表可知是不止一棵树,也就是数字建立的图是森林.对于遍历过的点标记一下,没标记的遍历即可.最后就是求树的直径. 倍数法中:j枚举了i的倍数 1「LibreOJ NOI Round #2」不等关系 (dp+NTT分治)
description 戳我看题目哦 solution 有一道非常相似的题目 一棵树,每条边限制两个端点的大小关系(限制 a [ u ] >[LOJ575]「LibreOJ NOI Round #2」不等关系
题意:给定字符串 \(\overline{s_1s_2\dots s_n}\),仅包含 < 和 > 两种字符,计算 使得 \(p_i < p_{i + 1}\) 当且仅当 \(s_i\) 为 \(<\) 的排列 \(p_1, p_2, \dots, p_{n + 1}\) 的数量对 \(998244353\) 取模的结果。 我魔改了 [HEOI2013]SAO 的dp计数题居然直接撞原题,且原题还加强#541. 「LibreOJ NOIP Round #1」七曜圣贤
题目描述 https://loj.ac/problem/541 题解 一直在往数据随机的方向想 把<=A中的删除操作看成元素的话,那么就是求一个队列里的最小值,单调队列维护 >A的部分再维护一个未选的最小值,选了之后就和上面一样了,最后再取min code #include <bits/stdc++.h> #define fo(a,b,c) for (a=b; a