思维
moomhxy
你若是天才,我便是疯子
展开
-
leetcode 寻找两个正序数组的中位数
题意:给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。思路:首先假设两个数组大小分别为n和m,如果(n + m)为奇数的话我们需要找到第(n + m + 1) / 2个元素;如果(n + m)为偶数的话我们需要找到第(n + m) / 2 和 (n + m) / 2 + 1个元素,现在我们定义一个函数来找到两个数组中第k大的原创 2020-11-02 14:43:21 · 173 阅读 · 0 评论 -
Codeforces Round #629 (Div. 3) D. Carousel 思维
题目链接:https://codeforces.com/contest/1328/problem/D题意:给你n个数字构成一个环,对每个数字进行染色,要求相邻的不同数字不能颜色相同,求最小颜色数思路:如果全部相同的话那么都是1就行,然后当n是偶数时,我们1,2,1,2这样涂是可以的。当n是奇数的时候如果a[n] == a[1] ,那么1212这样依然可以,不相等的话我们就找到相等的且相邻的两...原创 2020-03-27 17:43:11 · 244 阅读 · 0 评论 -
Codeforces Round #629 (Div. 3) F. Make k Equal 思维
题目链接:https://codeforces.com/contest/1328/problem/F题意:给你n个数字的序列,每次你可以将最大的数减一,最小的数加一,问最少多少次操作后有k个相等的数思路:例如对于a[i], 我们需要将前面的改成a[i] - 1, 将后面的改成a[i] + 1, 所以我们将数组排序后用map分别记录一下某个值第一次出现和最后一次出现的位置,然后On 遍历对于每...原创 2020-03-27 17:17:16 · 347 阅读 · 0 评论 -
BAPC 2019 F. Find my Family set + 二分
题目链接:https://nanti.jisuanke.com/t/44322题意:给你n个数的序列,问你是否存在ai > aj, aj < ak, ai < ak, i < j < k思路:我们贪心的想,由于要是ak最大,所以我们从后往前取一个最大值,前面的用set维护一下二分找到第一个大于ai的,检查是否小于ak,并将找到的数从set中删除,扫描一遍即可。...原创 2020-03-24 12:34:14 · 317 阅读 · 0 评论 -
BAPC 2019 E. Efficient Exchange 思维+ 贪心
题目链接:https://nanti.jisuanke.com/t/44331题意:你有无限的1,10,100……金钱,现在你要花费n元,你的代价是花费的金币数和找零的金币数之和,求最小代价思路:对于小于5的位肯定是直接付比较优,大于5的话肯定是付10这种更优,等于5的时候需要特判一下如果进位对前面的位是否更优,更优的话(a[i - 1] >= 5) 就进位就行了#includ...原创 2020-03-24 12:26:20 · 526 阅读 · 0 评论 -
Codeforces Round #619 (Div. 2) E. Nanosoft 最大合法正方形
题目链接:http://codeforces.com/contest/1301/problem/E题意:对于一个正方形分成4等份,左上角红,右上角绿,左下角黄,右下角蓝才认为合法的,对于给定的矩形,询问你这个矩形中最大的合法正方形面积思路:用二维前缀和统计方块,正方形边长最大250,枚举边长,每次检查左上角个数是否为l*l,其余角同样,做个前缀和可以O(1)判断如果范围再大些我们可以用...原创 2020-03-17 13:16:27 · 187 阅读 · 0 评论 -
CodeForces - 1247C p-binary 【思维】
题目链接:https://codeforces.com/problemset/problem/1247/C题意:给你两个数n和p, 让你将n分解成最少的二进制位,但是二进制位变成了2^x + p, 例如当n = 24,p = 1时,思路:不难想到n在二进制分解后绝对不会超过40位,所以对于这么小的范围我们就暴力枚举多少位能够组成n就行了。但是有可以重复用某一位的情况,所以还需要记...原创 2019-11-21 23:26:25 · 225 阅读 · 0 评论 -
CodeForces 1247B2 - TV Subscriptions (Hard Version) 【思维】
题目链接:https://codeforces.com/problemset/problem/1247/B2题意:就是有k种频道,现在有一个播放频道的序列,问最少需要买多少个频道使得能够连续d天看。思路:比较简单的题目,我们只需要每次处理长度为d的区间,初始o(n)可以得到算出来需要购买的数量,然后区间右移,把左端点去掉,加上右区间端点,就可以得到一个新的答案,然后每次取最优就可以了。...原创 2019-11-21 23:17:11 · 476 阅读 · 0 评论 -
AcWing 109. 天才ACM【倍增+归并】
给定一个整数MM,对于任意一个整数集合SS,定义“校验值”如下:从集合SS中取出MM对数(即2∗M2∗M个数,不能重复使用集合中的数,如果SS中的整数不够MM对,则取到不能取为止),使得“每对数的差的平方”之和最大,这个最大值就称为集合SS的“校验值”。现在给定一个长度为NN的数列AA以及一个整数TT。我们要把AA分成若干段,使得每一段的“校验...原创 2019-11-06 00:51:39 · 288 阅读 · 0 评论 -
HDU 6681 Rikka with Cake【线段树查询射线交点数】
题意:给你一个n*m的矩形,然后给你k个射线,每个射线向上下左右四个方向,问你这个区间能被划分成多少块。思路:好像可以根据欧拉定理推出来,反正我当时推了几个发现答案就是交点个数+1,所以我们只需要统计交点个数就行了。我是用的线段树,我们将竖线看做线段,在y轴上做一个线段树,那么如何来统计交点呢?我们枚举每个竖线,对于统计它会和多少个横线相交就行了。所以我们需要预处理横线,假设'L' 方向的...原创 2019-09-07 20:46:03 · 179 阅读 · 0 评论 -
HDU 6701 Make Rounddog Happy【ST表+分治】
题意:给你n个数组成的序列和一个数字k,问你有多少个区间满足该区间的最大值-区间长度 <= k,且区间无重复元素。思路:对于某个区间的最大值,我们可以用ST表O(1)求,我们还需要处理每个元素往左往右最大能扩展的区间,也就是区间元素都不重复,可以O(n)预处理。我们接着考虑进行分治求解,以最大值为分割点,分成两个区间,枚举小区间中的元素作为端点时的合法区间,如果存在就加上答案。...原创 2019-09-09 13:10:23 · 206 阅读 · 0 评论 -
HDU 5692 Snacks【线段树+DFS序】
百度科技园内有nn个零食机,零食机之间通过n−1n−1条路相互连通。每个零食机都有一个值vv,表示为小度熊提供零食的价值。由于零食被频繁的消耗和补充,零食机的价值vv会时常发生变化。小度熊只能从编号为0的零食机出发,并且每个零食机至多经过一次。另外,小度熊会对某个零食机的零食有所偏爱,要求路线上必须有那个零食机。为小度熊规划一个路线,使得路线上的价值总和最大。Input输入数据第一行是...原创 2019-09-12 10:40:07 · 159 阅读 · 0 评论 -
CodeForces - 672D Robin Hood 【二分+思维】
题目链接:http://codeforces.com/problemset/problem/672/D题意:有n个人,每天钱最多的人要给钱最少的人一块钱,问k天后钱最多与最少的人间的差是多少。思路:可想而知,随之时间的增加,钱少的人的钱会越来越多,直到接近平均值,有钱人则越来越少,也接近平均值。假设我们现在考虑钱少的人,我们对其k天后的钱进行二分答案,可以知道其单调性满足,每次判断当前...原创 2019-11-27 14:51:28 · 201 阅读 · 0 评论 -
Codeforces Round #584 G1.Into Blocks (easy version)【思维】
题目链接:http://codeforces.com/contest/1209/problem/G1题意:给你一个序列,你可以将数字改成任意的数,但必须将相同的数字都修改,而且使得修改后的序列满足任意两个相同的数字间的数也跟他们相同,问最少的修改次数。思路:我们记录一下每个数字最右边的位置,然后对于当前区间,需要找到最多的重复元素,剩余的都需要修改。#include<bits/...原创 2019-09-16 14:34:26 · 301 阅读 · 0 评论 -
2019上海ICPC网络赛 B. Light bulbs【差分+思维】
题库链接:https://nanti.jisuanke.com/t/41399题意:n个灯泡,初始关闭,每次将一个区间翻转,问你最后有多少灯泡是打开的。思路:题目n范围较大,操作次数较小,所以我们考虑对区间进行操作。利用差分的思想,将区间端点都压入一个队列里,按照x轴排序,然后当sum为奇数时可以确定是打开状态,所以就是当前点减去上次的端点就是符合条件的灯泡数目。#include&l...原创 2019-09-16 15:24:52 · 287 阅读 · 0 评论 -
HDU 5534-Partial Tree【完全背包+思维】
题意:给你n个点,再给出来你f(1 ~ n) 就是每个度数的权值,让你构建一棵树,使得所有点的权值和最大。思路:首先每个点的度数至少都是1,而且这n个点的度数总和必须是2n - 2, 因为这是一棵树。所以模型就转换成了n - 1种类型的物品,第i个重量是i,价值是f(i),挑选出n件物品,总重量是2n - 2的最大价值。三维的很容易想到,但复杂度铁超,我们考虑二维来写。首先每个点的...原创 2019-09-27 10:28:54 · 174 阅读 · 0 评论 -
HDU 5573-Binary Tree【思维+二进制】
题意:给你一个满二叉树,对于每个结点u,左儿子结点时2u,右儿子是2u+1,给你一个n和k,问你选一条k个节点的路径,每个点你可以选择加上或者减去这个结点的编号值,要求最终答案是n。思路:我们考虑选择最左边的那条链,对于n是任意偶数而言,不难发现都可以构成。而对于n是奇数而言,我们在选择第k个时选择右儿子,最末尾的1就可以消掉转换成了偶数的情况。#include<bits/stdc...原创 2019-10-01 14:00:52 · 188 阅读 · 0 评论 -
CodeForces 55D-Beautiful numbers【数位DP+思维】
题目链接:https://codeforces.com/problemset/problem/55/D题意:Volodya 是一个古怪的男孩,他的品味与众不同。对他来说,一个正整数是漂亮数,当且仅当它能够被自身的各非零数字整除。我们不必与之争辩,只需计算给定范围中有多少个漂亮数。输入输入的第一行包含了测试用例的数目t(1 ≤ t ≤ 10)。接下来的t行,每行包含两个自...原创 2019-10-01 23:13:11 · 304 阅读 · 0 评论 -
UVALive 7261 Xiongnu's Land【差分】
题目链接:https://vjudge.net/problem/UVALive-7271题意:给你一个n*n的矩形区域,左下角是(0,0),然后给你m个区域内的小矩形,然后让你从某个竖线划分开,使得1.左边小矩形总面积大于等于右边的,并且使差值尽可能小。2.在满足条件1的情况下使得竖线尽可能往右。思路:我们假设在x处分开,然后我们考虑如果在x+1处分开会有什么影响,根据差分的思想,...原创 2019-10-02 22:43:26 · 180 阅读 · 0 评论 -
HDU 6639 Faraway【思维 + 枚举】
题意:问你二维平面中有多少个点满足思路:考虑去掉绝对值,也就是相当于每个点把平面划分成了四个区域,所以总共划分成了n^2 个区域。而由于k 的范围[ 2, 5 ] ,lcm(2,3,4,5) = 60, 所以我们从0枚举到60,然后O(n)判断是否合法,如果合法的话就可以O(1)计算出来答案。在区间[l, r] 中由于是60 一个循环,所以我们计算答案就是(r-l-1)/ 60 +...原创 2019-09-05 17:53:56 · 213 阅读 · 0 评论 -
HDU 6627 equation【思维 + 数学】
题意:给你两个序列a和b,让你求满足该条件的所有x。思路:首先对于所有ai,bi,我们都可以找到一个G点,使得小于G的 | ai * x + bi | = -ai * x - bi , 此时G就是-bi / ai , 所以我们记录一下所有G点,然后按照从大到小的顺序枚举,因为后面小于的式子都已经确定了,所以我们就可以求解答案了。当ai和为0, bi和为C的时候很明显有无穷解,而当bi 的...原创 2019-09-03 20:23:50 · 199 阅读 · 0 评论 -
HDU 6625-three arrays【01字典树 + 思维】
题意:给你两个数组,让你可以任意匹配两个数组进行异或,使得异或后的字典序最小。思路:对两个数组分别建树,同时记录各个节点出现的次数,每次挑两个数异或并消除,那么最终状态一定会将两棵树消完。在取两个数的时候,取相同位优先,因为这样异或为0,其次才是不同的01,10,如果相同的话位权为1,那么我们就要加上这个位权。其实也就相当于在二叉树中找一条链,,我们优先找相同的对结果来说肯定是最优的。...原创 2019-08-14 21:03:15 · 175 阅读 · 0 评论 -
HDU 6623-Minimal Power of Prime【思维+枚举】
题意:给你一个数n(n< 1e18),问你质因数分解后最少的幂是多少,例如8=2*2*2,就是3.思路:先暴力打出来1e4的素数表,然后进行质因数分解,如果没有n分解后为1,或者最少幂次已经为1就说明答案为1,否则n只可能是某个素数的4次幂或者3次幂或者2次幂,或者n就是一个大素数。#include<bits/stdc++.h>using namespace std;...原创 2019-08-09 21:21:14 · 227 阅读 · 0 评论 -
牛客网 CDMA【构造+思维】
题意:让你构造一个n*n的矩阵,满足任意两行相乘为0.思路:当n为2时,矩阵为 1 1 , 然后我们考虑用m构造出2m的解 1 -1#include <bits/stdc++.h>using namespace std;typedef long long ll;#de...原创 2019-08-18 22:30:40 · 166 阅读 · 0 评论 -
牛客网 triples II 【组合数+DP】
题意:给你一个数a,问让你用n个3的倍数or(或)操作能够得到a的方案数,注:0也是思路:如果把a的二进制表示看做一个集合,而把一个拥有a集合部分1的子集当做a的子集,那么问题就转换成了有多少个a的子集可以通过或操作后得到a,那么我们定义S[i][j]表示i个1,j个2的子集数,(当前二进制位权mod 3,这样可以方便确定3的倍数)很明显可以通过组合数求出来。但在求答案的时候会重复计算,所以需...原创 2019-08-13 20:06:24 · 212 阅读 · 0 评论 -
HDU 6651-Final Exam【思维】
问题描述期末考试即将到来!Cuber QQ现在有一个晚上准备明天的考试。考试将是对共享问题的考试米点。Cuber QQ不知道确切的分布。当然,不同的问题可能有不同的意义;在某些极端情况下,一些问题可能值得0点或全部米点。积分必须是整数;一个问题不能有0.5点。他知道的是,这些ñ问题将是关于ñ完全不同的主题。例如,一个可能是测试你对动态规划的理解,另一个可能是关于19世纪中国的历...原创 2019-08-13 14:38:48 · 402 阅读 · 0 评论 -
HDU 6592-Beauty Of Unimodal Sequence【单调栈+LIS】
题意:给你一个序列,让你找长度最长的字典序最小和最大的单峰序列,单峰序列就是满足先增后降的序列。思路:先正着求一遍LIS,再反着求一遍LIS,然后用单调栈来模拟。求字典序最小的话,首先找到第一个顶峰,然后往前找递减的序列中下标较小的,往后就依次找,这样能保证字典序最小。最大的话找到最后一个顶峰,往前是依次找,往后是找LIS中下标大的。#include<bits/stdc++...原创 2019-08-13 14:27:14 · 383 阅读 · 0 评论 -
牛客网 Subarray 【思维】
题意:有个区间[1, 1e9], 给你n个被1覆盖的区间,剩下的都是-1,问你有多少个区间和大于0。思路:能被1覆盖的区间长度最多有3e7, 因为区间向前,向后最多可以覆盖1e7,所以加起来就是3e7,这是本题求解的关键。所以我们可以处理一下区间,让它尽可能的延伸而又不至于小于0,这样我们就可以用树状数组来求,可范围太大了我们只能用别的方法。我们需要计算在当前点有多少前面点的前缀和大于等于...原创 2019-08-04 14:45:22 · 285 阅读 · 0 评论 -
牛客网 Euclidean Distance 【思维+贪心】
题意:让你在n维空间里找一个点,使得题中的式子最小。思路:首先将a序列从大到小排序,我们优先给大的分配,找到分配的边界,然后计算分子分母就可以了。#include<bits/stdc++.h>using namespace std;typedef long long ll;#define lson l, mid, rt << 1#define rson...原创 2019-08-04 14:34:29 · 272 阅读 · 0 评论 -
牛客网 Beauty Values 【思维】
题意:给你一段序列,让你求所有连续序列的权值。序列的权值定义为区间不同元素的个数思路:假设序列为 1 2 3 2 3 4, 相同的为2,位置分别为2,4,那么考虑他们同时在一个区间里的时候会使答案-1,那么同时包含他们两个的区间有多少个呢,就是2 * (6 - 4 + 1)= 6个,也就是x * (n - y + 1), 所以总和减去6就可以。对于有多个相同的,每考虑连续两个相同的元素造成的...原创 2019-08-10 23:51:12 · 220 阅读 · 0 评论 -
POJ 2566-Bound Found【尺取】
从数列中找出连续序列,使得和的绝对值与目标数之差最小Input多组用例,每组用例第一行两个整数n和m分别表示数列长度和查询次数,第二行为n个整数表示数列,第三行为m个整数表示目标数,以n=k=0结束输入 0<=t<=1000000000;1<=n<=100000Output对于每次查询,输出三个整数sum,l,r,分别表示其绝对值与目标数之差最小的连续序列值...原创 2019-08-11 16:00:53 · 301 阅读 · 0 评论 -
POJ 1456 Supermarket【并查集 + 贪心】
超市里有N个商品. 第i个商品必须在保质期(第di天)之前卖掉, 若卖掉可让超市获得pi的利润.每天只能卖一个商品.现在你要让超市获得最大的利润.Input多组数据.每组数据第一行为一个整数N (0 <= N <= 10000), 即超市的商品数目之后N行各有两个整数, 第i行为 pi, di (1 <= pi, di <= 10000)Output...原创 2019-09-02 22:37:15 · 256 阅读 · 0 评论 -
牛客网 Hilbert Sort 【思维】希尔伯特曲线
题目链接:https://ac.nowcoder.com/acm/contest/890/E题意:第i个图形是由4个(i-1)的图形拼成的,左上角要经过主对角线,右上角的要经过次对角线。第四个的话应该是这种的(拼一块的有点乱)所以不难发现规律,左上角的小格子内的顺序是次对角线互换,右上角的小格子内的顺序是主对角线互换 。初始的规律是确定的,就是一个U,我们对大小为K的矩阵的...原创 2019-08-18 01:02:23 · 746 阅读 · 0 评论 -
牛客网 Popping Balloons 【线段树】
题意:在坐标轴上给你n个点(n<=1e5),点的横纵坐标是[0, 1e5],你可以从选3行,每行间隔是d,选3列同样间隔d,点只能被选一次,问你最多能选多少点。d<=1e5思路:我们考虑对列建一棵线段树,每个结点放的是num[j] + num[j + d] + num[j + 2d] 的值,然后我们枚举行的同时删除选中的点,然后线段树查询最大值就行了。删除点的时候只会对自己x,x-...原创 2019-08-22 15:47:00 · 238 阅读 · 0 评论 -
牛客网 Symmetrical Painting 【思维+枚举】
题意:给你n个矩形,第i个矩形的左下角左边是(i - 1, Li), 右上角是(i, Ri), 让你找到一条对称轴,使得能关于这条对称轴对称的矩形面积最大。思路:我们考虑枚举每个矩形的上界,下界和对称轴作为答案的对称轴,那么接下来我们考虑变换对称轴对答案带来的影响。假设我们现在枚举的对称轴与上一个的高度差为h,我们可以发现:1.如果对称轴位于这个矩形的[l, (l + r) / ...原创 2019-08-21 21:52:59 · 193 阅读 · 0 评论 -
牛客网 Removing Stones【思维】
题意:n堆石头,每次可以挑出来两堆同时减一,如果初始石子和为奇数你可以挑选最少的一堆石子拿走一个,问你有多少个区间满足最后可以把所有石子挑完。思路:题目可以转化为求一个长度大于等于2的连续子数列,其中最大的元素不大于其它元素和的1/2,网上有相关证明。所以我们枚举把第i个当做最大元素,找到不满足的左区间,然后找到不满足的右区间,答案减去这个不满足的区间,然后左端点右移继续找,感觉复杂度会爆...原创 2019-08-13 01:08:00 · 183 阅读 · 0 评论 -
牛客网 Knapsack Cryptosystem【思维】
题意:给你一个n个元素的数组,给你一个sum,让你找到数组的子集使得子集元素和等于sum,保证只有一个解决方案。n<=36, sum < 9e18思路:爆搜肯定是不行的,有一个很巧妙的思路,就是将数组分成两个区域,18个元素我们完全可以暴力枚举子集,并放到set里,然后再对右区域枚举子集,O(1)检查sum - 子集和是否存在就行了。#include <bits...原创 2019-08-15 19:52:35 · 192 阅读 · 0 评论 -
HDU 6616-Divide the Stones【思维】
问题描述有n个石头从1到n编号。第i块石头的重量是一公斤。我们将石头分成k组。每组由石头组成。我们定义每组的重量是组中石头重量的总和。我们可以将石头分开,以便所有组的重量相同吗?输入第一行输入包含一个整数T(1 <= T <= 100),表示测试用例的数量。每个测试用例由一行包含两个整数n(1≤n≤100000),k(k是n的除数)组成。保证n个总体测试用...原创 2019-08-11 18:02:19 · 346 阅读 · 0 评论 -
牛客网 Upgrading Technology【思维+枚举】
Rowlet在口袋妖怪世界中扮演一个非常受欢迎的游戏。最近,他遇到了一个问题,想要求你的帮助。在这个游戏中,有一个技术树系统。在这个游戏中有n种技术,每种都有m级,从1到m。一开始,所有技术都没有水平(视为0级)。当第i个技术处于第(j-1)级时,玩家可以支付pokedollars(在这个游戏中使用的货币)来将该技术升级到第j级。但是,有时升级很容易,成本可能是负的,这意味着玩家可以通过升级技...原创 2019-08-03 22:25:19 · 242 阅读 · 0 评论