随笔分类 -  贪心

摘要:B(贪心、fft) 将两数列排序后按照正负分离,最大值与最小值类似 考虑求最大值,对于两数列中同号的部分,显然按照绝对值顺序依次相乘;对于异号部分,需要令绝对值乘积尽可能小,简单列式子后可以得到该部分贡献为倒序卷积,按照不同情况翻转其中一个数列 最小值同理,只需先将其中一个数列翻转,后续步骤类似。 阅读全文
posted @ 2022-10-27 17:31 jack_yyc 阅读(62) 评论(0) 推荐(0)
摘要:A(模拟) 按题意模拟至指令达到上限 #include<bits/stdc++.h> #define rep(i,s,t) for(int i=(s),i##end=(t);i<=i##end;i++) #define dwn(i,s,t) for(int i=(s),i##end=(t);i>=i 阅读全文
posted @ 2022-10-25 19:55 jack_yyc 阅读(103) 评论(0) 推荐(0)
摘要:2019 NWERC(最短路+凸包、线段树二分、智慧题) D. Disposable Switches 显然最终的答案只与经过的边数和经过的最短路径长度和有关 令$dis[x][k]$表示到$x$点经过$k$条边的最短路(因为记录了边数,这个东西可以直接$n^2$预处理 完全不可能的点不容易求,考虑 阅读全文
posted @ 2021-10-27 11:59 jack_yyc 阅读(94) 评论(0) 推荐(0)
摘要:A 先构造出$1-8,16$这$9$个数,共需要$17$步 之后按照每四位一个单位构造数$x$,若$x$的末四位$\le 8$可以直接加,否则需要在之前$+1$然后减去一个$<8$的数 这样每一个$4$位最多用两步即可解决,一共最多$17+16\times2+1=50$步 (注意一直进位使得整个数多 阅读全文
posted @ 2021-08-17 23:50 jack_yyc 阅读(56) 评论(0) 推荐(0)
摘要:A 先不考虑空间的限制,考虑每次一个字符串转变的情况,需要找到$trie$树上第一个独立于剩余字符串的前缀 则这个前缀即为这次所需的前缀,但需要考虑这个前缀可以替代之前的前缀的情况 新开一个$num$数组记录$trie$树上每个节点在前缀中出现了几次,则每次新增答案为找到节点的$1-num[x]$ 阅读全文
posted @ 2021-08-16 21:25 jack_yyc 阅读(64) 评论(0) 推荐(0)
摘要:A 离谱平衡树题 咕 B 好像更离谱的结论题 C 设$ans_i$表示以$a$串的$i$为起始匹配位置的失配数 则$ans_i=\sum\limits_{j=0}{m-1} [b_j\neq a_{i+j}]$,将$b$串翻转,即有$ans_i=\sum\limits_{j=0}{m-1} [b_{ 阅读全文
posted @ 2021-07-30 19:26 jack_yyc 阅读(60) 评论(0) 推荐(0)
摘要:A 从小到大搜索,对于一个未知状态 若不能一步到达必败态则该状态为新的必败态 搜索跑一下打表即可 #include<bits/stdc++.h> #define inf 2139062143 #define ll long long #define ull unsigned long long #d 阅读全文
posted @ 2021-07-30 17:20 jack_yyc 阅读(308) 评论(0) 推荐(0)
摘要:T1 words 题目大意: bzoj 4567 题解链接 考试代码: (如果不重建树的话会出锅 例子: 其中加粗的边为有$end$标记的节点,若不重建树,则左边$a$的$sz$为4,右边为3会先走右边 实际上应该先走左边(man太惨了。 View Code T2 tree 题目大意:bzoj 48 阅读全文
posted @ 2019-03-14 09:14 jack_yyc 阅读(243) 评论(0) 推荐(0)
摘要:题目大意: 树上每个点有一个正的点权,选k条从根出发的的链使链并权值和最大 思路: 被长链剖分的标签骗进来 法1: 这道题长链剖分标签的由来,类似重链剖分把树剖成若干条链,然后贪心的选k条即可 1 #include<iostream> 2 #include<cstdio> 3 #include<cs 阅读全文
posted @ 2019-03-12 19:49 jack_yyc 阅读(174) 评论(0) 推荐(0)
摘要:题目大意: n个数组成的环中取m个互不相邻的数使这些数和最大 思路: 贪心 先用链表把数存起来 然后每次选一个最大的$a[x]$,把链表左右两边的删掉 把这个值替换为$a_{left[x]}+a_{right[x]}-a_x$ 这样在堆里重复m次即可 1 #include<iostream> 2 # 阅读全文
posted @ 2018-12-26 07:52 jack_yyc 阅读(192) 评论(0) 推荐(0)
摘要:被低年级大佬暴踩的一次比赛 AK失败获得#3 T1 括号 题目大意: 对于任意 i 位置若与 n-i+1 相反则输出YES 否则输出NO 思路: 暴力判断即可 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include 阅读全文
posted @ 2018-10-19 11:07 jack_yyc 阅读(190) 评论(0) 推荐(0)
摘要:又是AK失败的一天 T1 小M的算式 题目大意: 一个数字组成的字符串 每两个字符间可以加入+或=或不加入符号(整个串只能加入一个=) 求这个字符串能否变成一个等式 思路: 爆搜 枚举一下等号出现位置 1 #include<iostream> 2 #include<cstdio> 3 #includ 阅读全文
posted @ 2018-10-15 19:22 jack_yyc 阅读(166) 评论(0) 推荐(0)
摘要:T1 IMMEDIATE DECODABILITY poj 1056 题目大意: 一些数字串 求是否存在一个串是另一个串的前缀 思路: 对于所有串经过的点权+1 如果一个点的end被访问过或经过一个被标记为end的点 就存在 1 #include<iostream> 2 #include<cstdi 阅读全文
posted @ 2018-07-19 16:18 jack_yyc 阅读(253) 评论(0) 推荐(0)
摘要:T1 note 数组开小 菜的真实 60分 题目大意: 一个字符串 分成若干段 使每段内都没有重复的字符 求最少的段数 思路: 可以贪心 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstdlib> 5 # 阅读全文
posted @ 2018-07-12 19:46 jack_yyc 阅读(142) 评论(0) 推荐(0)
摘要:New: n个物品要在两个机器上加工 时间分别为ai bi 必须现在第一台机器上加工 求最短加工时间 Johnson算法: N1为a<b物品集合 N2为a>=b物品集合 N1物品按a升序排序 N2按b降序排序 N1接N2为最优顺序 1 #include<iostream> 2 #include<cs 阅读全文
posted @ 2018-07-09 14:21 jack_yyc 阅读(138) 评论(0) 推荐(0)
摘要:题目大意: N 个村庄,由 M 条道路连接 其中一些道路是鹅卵石路,而其它道路是水泥路 求一个方案使保留尽可能少的道路,但是两个不同的村庄之间都应该由一条且仅由一条免费道路的路径连接且刚好保留K条鹅卵石路 思路: 并查集 先将所有水泥路都加入并查集中 然后找到那些必须被加入的鹅卵石路 再补上其他的鹅 阅读全文
posted @ 2018-05-03 22:21 jack_yyc 阅读(174) 评论(0) 推荐(0)
摘要:题目大意: 在整个区间里选k个长度在L-R之间的连续子段 求出最大答案 思路: 可以枚举区间的起点,然后可以查找长度合法的区间,从这段区间里找出来一个前缀和最大的然后减去起点 维护一个pq,每次弹出堆中最大的元素来,弹k次 堆里的每个元素记录这些信息:权值val,起点st,合法区间的l r,最大值的 阅读全文
posted @ 2018-03-09 20:08 jack_yyc 阅读(150) 评论(0) 推荐(0)
摘要:题目大意: n种牌,第i种牌的数目为ci 另外有一种特殊的牌:joker,它的数目是m 用每种牌各一张来组成一套牌,也可以用一张joker和除了某一种牌以外的其他牌各一张组成1套牌 比如,当n=3时,一共有4种合法的套牌:{1,2,3}, {J,2,3}, {1,J,3}, {1,2,J} 给出n, 阅读全文
posted @ 2018-02-12 18:49 jack_yyc 阅读(176) 评论(0) 推荐(0)
摘要:题目大意: n个数 选k个使和为奇数且最大 思路: 可以先将这n个数排序 然后先去最大的k个数 若和为奇数则直接输出 为偶数可以用没选的最大的奇数替换选了的最小的偶数或用没选的最大的偶数替换选了的最小的奇数 预处理出4个数组即可 1 #include<iostream> 2 #include<cst 阅读全文
posted @ 2018-02-06 21:10 jack_yyc 阅读(164) 评论(0) 推荐(0)
摘要:题目大意: 给定n个不同颜色的球,每个球都有一个分数,同时有m个瓶子,每个瓶子都有固定的容量 必须把球放到瓶子里面 计算最多能放多少个球到这些瓶子里 思路: 开始想的是费用流 超级源向每个球连一条 容量为1,费用为球的分数的边 每个瓶子和它可以装下的球连一条 容量为1,费用为0的边 每个瓶子和汇点连 阅读全文
posted @ 2018-02-04 20:24 jack_yyc 阅读(252) 评论(0) 推荐(0)