自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 P2168 [NOI2015] Huffman 树

题意传送门 P2168 [NOI2015] 荷马史诗题解构造 HuffmanHuffmanHuffman 编码。将单词出现次数看做叶子节点的权值,构造 kkk 叉 HuffmanHuffmanHuffman 树,在权值相同时优先考虑已合并节点代表的子树深度最小(即合并次数最小)的节点进行合并。#include <bits/stdc++.h>using namespace std;typedef long long ll;struct node{ ll w; int

2021-01-31 22:58:23 55

原创 P6033 [NOIP2004 提高组] 桶排序 / 基数排序 + 队列

题意传送门 P6033 [NOIP2004 提高组] 合并果子 加强版题解桶排序 + 队列桶排序的基本思想是在元素值域上按顺序分为一块块区域(桶),将各个元素划分到其对应值域范围的区域,然后分别对各个区域的元素进行排序,最后合并各区域元素。设区域个数为 bbb 且元素均匀划分至各区域,排序时间复杂度 O(b×(n/b)×log⁡(n/b))O(b\times (n/b)\times \log (n/b))O(b×(n/b)×log(n/b)),归并时间复杂度 O(n)O(n)O(n)。若元素值域较小

2021-01-31 21:04:30 176

原创 P1090 [NOIP2004 提高组] / [USACO06NOV] Huffman 树

题意_传送门P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G _题解体力耗费值对应一个二叉 HuffmanHuffmanHuffman树问题,果子堆的重量对应叶子节点的权值,参与合并的次数即叶子到根的距离。#include <bits/stdc++.h>using namespace std;int N;int main(){ scanf("%d", &N); priority_queue&l

2021-01-30 23:23:05 111

原创 POJ 2442 二叉堆

题意传送门 POJ 2442 Sequence题解若 m=1m=1m=1,使序列升序排序即答案;若 m=2m=2m=2,使序列 A,BA,BA,B 升序排序,若第 kkk 小值为 A[i]+B[j]A[i]+B[j]A[i]+B[j],则第 k+1k+1k+1 小的备选答案中要加入 A[i+1]+B[j],A[i]+B[j+1]A[i+1]+B[j],A[i]+B[j+1]A[i+1]+B[j],A[i]+B[j+1](为防止备选答案重复,应该使其产生路径唯一)使用二叉堆维护备选的第 kkk 小值,求

2021-01-30 22:21:57 254

原创 POJ 1456 贪心 + 优先队列 / 并查集

题意传送门 POJ 1456题解使用贪心策略,对于每个时间点 ttt,在保证不卖出过期商品的情况下,尽量卖出利润前 ttt 大的商品。按照过期时间从小到大对商品排序,顺序考虑商品,使用优先队列动态维护满足上述性质的方案。对于每一个扫描到的商品,若其过期时间大于当前堆中的商品数(此时之前扫描过的商品因为最优性或过期时间限制不能再加入堆中)将此商品加入方案;反之,若商品利润大于堆中商品利润的最小值,那么可以使用此商品替换堆顶对应的商品。时间复杂度 O(nlog⁡n)O(n\log n)O(nlogn)。

2021-01-30 20:58:52 154

原创 POJ 1961 KMP

题意传送门 POJ 1961 Period题解若字符串长度大于 111 的前缀存在最小循环元,求其最大循环次数。S[1…i]S[1\dots i]S[1…i] 具有长度为 len<ilen<ilen<i 的循环元的充要条件是 lenlenlen 能整除 iii 并且 S[len+1…i]=S[1…i−len]S[len+1\dots i]=S[1\dots i-len]S[len+1…i]=S[1…i−len],此时 i−leni-leni−len 是 KMPKMPKMP 算法的

2021-01-30 13:58:46 67

原创 POJ 3974 二分 + Hash

题意传送门 POJ 3974 Palindrome题解回文串可按长度的奇偶性分为两类,奇长度字符串中间位置为单个字符,偶长度字符串中间位置为字符间的夹缝。预处理字符串正着读/倒着读的哈希前缀/后缀值,枚举回文串的中间位置,二分中间位置向左、向右拓展的长度,使用自然溢出的 HashHashHash 方法 O(1)O(1)O(1) 判断中心位置左侧倒着读与右侧正着读的哈希值是否相等,若相等,则对应子串相等,扩展下界。时间复杂度 (Nlog⁡N)(N\log N)(NlogN)。#include <

2021-01-29 21:37:03 139 1

原创 POJ 3784 对顶堆 / 链表

题意传送门 POJ 3784 Running Median题解对顶堆动态维护中位数,可以维护 222 个二叉堆,111 个小根堆,111 个大根堆。大根堆维护从小到大的第 [1,⌊M/2⌋][1, \lfloor M/2\rfloor][1,⌊M/2⌋] 个数,小根堆维护从小到大的第 [⌊M/2⌋+1,M][\lfloor M/2\rfloor+1,M][⌊M/2⌋+1,M] 个数,此时中位数即小根堆堆顶元素。每次新读入一个数 xxx,若 xxx 大于中位数,则插入小根堆,否则插入大根堆。任何时候,

2021-01-27 23:24:44 213

原创 AcWing 134 贪心

题意传送门 AcWing 134 双端队列题解队列拼接后得到非降序列,考虑将数组按照值域排序,求在索引值上满足单谷性质的连续不重叠的序列的最小值。单谷性质是为了保证新加入双端队列的数字只能从两头插入,即其索引值大于队内中间元素的索引值。采取贪心策略,从左向右扫描数组,尽可能的拓展满足单谷性质的段的长度。若存在值域相等的元素,保证其相邻的条件下,可以交换其位置,使段尽可能的拓展;可以观察到使值域相等的元素按照索引值有序后,升序拼接或降序拼接,不会使答案更差。#include <bits/std

2021-01-27 09:48:39 82

原创 P2827 [NOIP2016 提高组] 队列

题意传送门 P2827 [NOIP2016 提高组] 蚯蚓题解容易想到使用二叉堆维护长度的最大值,由于每次新产生之外的蚯蚓长度都增加 qqq,而难以修改已经在堆中的元素,那么对新产生的蚯蚓长度减 qqq,可以使长度的相互关系保持不变。时间复杂度 O(mlog⁡n)O(m\log n)O(mlogn),显然难以胜任。设当前切割蚯蚓长度为 x1x_1x1​,那么新增蚯蚓长度分别为 ⌊px1⌋\lfloor px_1\rfloor⌊px1​⌋ 与 x1−⌊px1⌋x_1-\lfloor px_1\rflo

2021-01-26 21:23:40 102

原创 POJ 2259 队列

题意传送门 POJ 2259 Team Queue题解用 111 个队列维护已在队中的小组索引,用 ttt 个队列维护各个小组在队中的元素,就能够 O(1)O(1)O(1) 时间处理各个操作。#include <algorithm>#include <cstdio>#include <queue>using namespace std;const int maxn = 1000005, maxt = 1005;int id[maxn];queue&lt

2021-01-26 19:21:41 416

原创 POJ 2559 单调栈

题意传送门 POJ 2559题解枚举以每个矩形高度为目标区域高度的情况,此时问题转化为求解满足 j<i,H[j]<H[i]j<i,H[j]<H[i]j<i,H[j]<H[i] 最大的 jjj 以及满足 i<k,H[k]<H[i]i<k,H[k]<H[i]i<k,H[k]<H[i] 最小的 kkk。分别从左往右以及从右往左遍历矩形,单调递增栈维护对应的索引值,同时记录 j,kj,kj,k,最后枚举 iii 更新答案。#inclu

2021-01-25 23:17:11 126

原创 HDU 4699 对顶栈

题意传送门 HDU 4699 Editor题解操作始终在序列中间某个指定位置(即光标)进行修改,参照动态维护中位数的对顶堆算法,使用对顶栈对序列进行维护。建立 222 个栈,分别维护序列在光标左边与右边的部分,栈顶对应靠近光标的位置。为了维护某个位置之前的前缀和最大值,使用数组记录光标之前位置的前缀和最小值,当数据入栈时 O(1)O(1)O(1) 更新即可。根据对顶栈算法,在 O(1)O(1)O(1) 时间内实现了各类操作和询问。#include <algorithm>#inclu

2021-01-25 21:19:50 214

原创 AcWing 109 倍增 + 归并

题意传送门 AcWing 109 Genius ACM题解对于集合 SSS,设其有序,将最大的 MMM 个数与最小的 MMM 个数 (s0,sn−1),(s1,sn−2),…(s_0,s_{n-1}),(s_1,s_{n-2}),\dots(s0​,sn−1​),(s1​,sn−2​),… 配对,此时校验值最大。简单证明,若取其他的数,都可以从最大的 MMM 个数与最小的 MMM 个数中取一个未配对的数将其替换,使答案更大;若配对不满足最大的数与最小的数、次大的数与次小的数···这样配对,则将其按照上

2021-01-22 23:14:41 163

原创 POJ 2893 BIT

题意传送门 POJ 2893题解NNN 为奇数时,游戏两个局面可达,当且仅当两个局面下网格中的数按行展开写成 111 行 N×M−1N\times M-1N×M−1 个元素的序列后(不考虑空格),逆序对的个数相同。NNN 为偶数时,游戏两个局面可达,当且仅当两个局面下网格中的数按行展开写成 111 行 N×M−1N\times M-1N×M−1 个元素的序列后(不考虑空格),逆序对个数之差与两个局面下 000 所在的行数之差的奇偶性相同。值域与索引范围一致,直接 BITBITBIT 求解逆

2021-01-22 20:02:38 115 1

原创 P4552 [Poetize6] 差分

题意传送门 P4552 [Poetize6] IncDec Sequence题解求出 aaa 的差分序列 ddd,其中 d0=a0,di=ai−ai−1(1≤i<n)d_0=a_0,d_i=a_i-a_{i-1}(1\leq i<n)d0​=a0​,di​=ai​−ai−1​(1≤i<n)。令 an=0a_n=0an​=0,那么对区间的操作转化为对序列中两个数的加或减 111 操作,目标是使 d1,d2…,dn−1d_1,d_2\dots,d_{n-1}d1​,d2​…,dn−1​

2021-01-19 21:15:14 88

原创 P2114 [NOI2014] 位运算

题意传送门 P2114 [NOI2014] 起床困难综合症题解OR,XOR,AND\text{OR},\text{XOR},\text{AND}OR,XOR,AND 位运算在二进制表示下不进位,各位之间的运算是独立的,那么可以按位进行处理。由于初始数字有上界限制,于是从高位向低位处理。比较暴力的做法就是直接在每一位上分 0,10,10,1 两种情况进行计算。当初始数字为 111 时最终答案更优且初始数字不超出上界时,使这一位为 111,反之为 000。#include <bits/stdc+

2021-01-18 20:52:24 126

原创 HDU 4864 贪心

题意传送门 HDU 4864题解目标是最大化完成的任务数量,多解情况下最大化收益。机器 (xi′,yi′)(x'_i,y'_i)(xi′​,yi′​) 能完成某个任务 (xi,yi)(x_i,y_i)(xi​,yi​),需要满足{xi≤xi′yi≤yi′\begin{cases}x_i\leq x'_i\\y_i\leq y'_i\\\end{cases}{xi​≤xi′​yi​≤yi′​​ 那么最大化完成的任务数量,可以使用贪心策略。即将任务分别以 xi,yix_i,y_ixi​,yi​

2021-01-18 17:48:37 118

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除