思维
pubgoso
这个作者很懒,什么都没留下…
展开
-
Educational Codeforces Round 66 (Rated for Div. 2) F. The Number of Subpermutations hash
题目链接思路 :我们给每个数字iii分配两个64位的随机数,构成一个128位的随机串stist_isti。那这样一个长度为kkk的子排列的区间hashhashhash的异或和就等于⊕i=1kst[i]\oplus_{i=1}^kst[i]⊕i=1kst[i]因为1必须被包含进去,那我们以1为左端点l,枚举右端点r,设maxlr=k\max_l^r=kmaxlr=k,那么就check一下[r−k+1,r][r-k+1,r][r−k+1,r]是否为一个子排列。再倒着做一遍,正确性显然。特判一下原创 2020-12-08 23:41:53 · 133 阅读 · 0 评论 -
hdu6007 Mr. Panda and Crystal (最短路+完全背包)
题目链接思路:先求出每个道具的最小造价,再跑完全背包即可。我们不停的用 当前已得最小造价的道具来更新当前道具可以合成的道具,类似于dij求最短路那样。就能获得每个道具的最小花费了。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first原创 2020-11-29 11:50:47 · 206 阅读 · 0 评论 -
Educational Codeforces Round 98 (Rated for Div. 2) E. Two Editorials 细节题
题目连接真细节题… 选了一个很复杂的做法。枚举第一个作者AAA选的框,枚举选手iii。你会发现另一个作者BBB选的框对于选手iii来说,会有一些右端点连续的区间比AAA更优。那这样就可以知道作者BBB选哪些框更优并且也能用二次差分统计出优多少。搞完所有选手后,找出作者BBB选哪个框最优即可。二次差分的模板:void add(int l,int r,int op,int d){ //区间[l,r] 加上op为首项,d为公差的等差数列 tw[l]+=d;原创 2020-11-20 20:46:35 · 1154 阅读 · 1 评论 -
Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad) E.Team-Building 可撤销并查集
题目链接思路:转换题意就是求选两个不同的组构成的子图是一个二分图。那么可以先把一些自身就构成奇环的点找出来,这些点别的组也不能选。接下来我们对连接不同组的边进行分类讨论,因为显然两个组构成奇环肯定环上只有两个组中的点(自身构成奇环的已经被扣掉了)。那么对每一组都用并查集来check是否合法。由于有很多不同的组,那么就用可撤销并查集来撤销上一次的merge即可。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc+原创 2020-11-05 21:16:50 · 267 阅读 · 3 评论 -
2017 CCPC秦皇岛 D.Graph Generator
题目链接度数大的点肯定时后加进去的。那么猜想按度数小的顺序加可能是一组合法解。并查集维护连通性,每次看连出去的边和图中存在的边的数量是否合法。就对了…看了别的网友写的可撤销并查集维护感觉是一个道理但是麻烦很多。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#de原创 2020-11-03 21:56:11 · 187 阅读 · 0 评论 -
2019ICPC徐州 K.Kill the tree 树的重心
题目链接思路:树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。那么题目所求的就是每颗子树的重心了。dfs的时候求出每个子树的重心和最短距离,考虑怎么合并所有子树。这时候要用到第二个性质了:把一个树添加或删除一个叶子,那么它的重心最多只移动一条边的距离。那么这样就相当于重心在往上爬,我们可以让重心一直跳,找到根在这个子树上时,最短的距离和。对所有子树处理一遍就能找到最小距离和所有的重心了。转移的时候自己推一推贡献即可。#pragma GCC opti原创 2020-10-21 22:17:09 · 240 阅读 · 0 评论 -
hdu5517 Triple
题目链接题意有一点点绕…但最终就是找三维坐标内满足没有点的三个坐标都大于此点的点的数量。首先先按输入的b,e分组。然后枚举不同的b,一个小trick就是同组中,将c,d放到二维坐标中必然右上角是没点的时候,这个点才能通过选本组中最大的a来使得满足条件。这些点可以通过bit来check,注意c,d相同的点要放在一起check。用pair数组d[c][d]d[c][d]d[c][d]来表示最大的a,和数量。不同的组中,相同的c,d应该取最大的a。最后搞完之后,就枚举c,d来累计答案。但是还有一些点是原创 2020-10-14 00:29:47 · 105 阅读 · 0 评论 -
hdu5919 Sequence II
思路:主席树维护区间种类数。需要注意:区间种类数不能由区间端点做差得到;那,倒着建主席树就可以在树上二分找位置了。因为如果正着建树的话,在树上找位置的时候,就会有不在询问区间却产生影响的一些数。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;const int N=2e5+3;int n,q,tot;int T,cas,ans[N],vis[原创 2020-10-07 16:37:52 · 166 阅读 · 0 评论 -
hdu5921 Binary Indexed Tree
题目链接把题目要求的写成下面的式子,其中fxf_xfx为xxx的二进制中1的个数,lcp为最长公共前缀中1的个数。ANS=∑r=0n∑l=0n(fl+fr−2flcp(l,r))2ANS=\frac{\sum\limits_{r=0}^n \sum\limits_{l=0}^{n}(f_l+f_r-2f_{lcp(l,r)})}{2}ANS=2r=0∑nl=0∑n(fl+fr−2flcp(l,r))=(n+1)∑r=1nfr−∑r=1n∑l=1n(flcp(l,r))= (n+1)\su原创 2020-10-07 16:02:50 · 188 阅读 · 0 评论 -
Grakn Forces 2020 F. Two Different
思路:任意一个2的幂次大小的n最后都可以只剩下一个数字;例如1 2 3 4 5 6 7 8:1 2;3,4;5,6;7,8这样就剩下4个不同的数:1 1 2 2 3 3 4 4;再1 3;2 4;5 7;6 8就剩下2个不同的数了:1 1 1 1 2 2 2 2 。那么我们将n用最小的两个2幂次覆盖,然后递归的处理即可。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using na原创 2020-10-04 15:34:37 · 155 阅读 · 0 评论 -
Codeforces Round #673 (Div. 2) D. Make Them Equal
思路:如果n不能整除于sum的话就无解。那么考虑如何让每个数变成平均值,我们可以先把所有数都放到1的位置,再从1的地方分配给其他位置。第一步:将所有数加到1的位置,我们枚举2-n,如果 a[i]%i=0的话直接操作,否则的话就先从1的位置拿一些数让i这个位置满足a[i]%i=0。考虑初始每个数都是正数,所以这一步不会使1的位置成为负数。第二步:枚举 2-n,从1的位置拿sum/n个数过来。#pragma GCC optimize(2)#pragma GCC optimize(3)#includ原创 2020-10-03 13:50:35 · 167 阅读 · 0 评论 -
Grakn Forces 2020 D. Searchlights
思路:枚举花费多少次进行全体上移,找到上移x次后还需要至少多少次右移即可。具体做法:先找到所有不合法的对,按需要上移次数排序,用数组记录后缀右动的最大值,然后枚举的时候用双指针维护一下就行。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi f原创 2020-10-03 13:21:32 · 929 阅读 · 3 评论 -
2020牛客暑期多校训练营(第十场)C.Decrement on the Tree
题目链接对于一个节点而言,我们考虑这个点会被额外操作几次,显然这个点的返祖边操作的次数都可以延申道当前节点来用,我们设当前节点的的儿子边边权的和为sum,返祖边的权值为w。如果儿子的边边权的最大值在被祖先扣过之后还是超过了sum的一半,那么我们就不能两两连路径消,只能消最大的。否则,我们必然能两两连边消。修改操作就是去掉之前的贡献,再加上新的贡献就行。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h&原创 2020-08-11 01:11:50 · 272 阅读 · 0 评论 -
2020牛客暑期多校训练营(第九场)J.The Escape Plan of Groundhog
思路:枚举上下边界。先找到左右边框都是1的列,存在一个数组b里。因为外边框要全是1,所以我们找到这个上下边界的连续的1的段,对每段都单独计算答案。对每一段[l,r]而言,找到b数组的一个段,使得这些列都在[l,r]内。然后我们枚举右边框,找有多少满足条件的左边框,这显然用一个数组记录一下前缀的矩形内部1,0差值就可以实现了。时间复杂度O(n3)O(n^3)O(n3)#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/s原创 2020-08-08 17:57:31 · 1768 阅读 · 0 评论 -
AtCoder Beginner Contest 168 E - ∙ (Bullet)
题目链接思路:根据几种情况进行分类讨论1.a=b=0:选了这个就不能选别的了。2.a=0:这类数不能和 b=0的一起选3.b=0:这类数不能和 a=0的一起选4.other:我们称满足x情况的数为第x类数。具体:先将每个数的a,b取一下gcd化简一下。然后枚举每个数被选的情况下,[1,i-1]有多少种合法选择使得不与i冲突。设tot为[1,i-1]中第4类数的合法选择数。那么如果第i个数属于第2类数,那么选了第i个之后,显然[1,i-1]中的第2类数可以选任意多个,第3类数只能选0个,第原创 2020-05-18 12:12:44 · 292 阅读 · 0 评论 -
1326E - Bombs
题目链接思路:显然答案是单调不增的。根据这个性质,我们可以枚举答案来检查答案是否合法。假设第i−1i-1i−1次的答案为 ansi−1ans_{i-1}ansi−1,此时我们在qiq_iqi位置新加入了一个炸弹,那么当前存在炸弹的位置就是q1,q2.....qiq_1,q_2.....q_iq1,q2.....qi。如果存在一个位置yyy,使得[y,n][y,n][y,n]上≥x...原创 2020-03-22 15:31:44 · 547 阅读 · 0 评论 -
Educational Codeforces Round 25 G. Tree Queries
题目链接大意:给你一颗树和一些操作(初始所有节点都是白色)1:把vvv点染成黑色2:找到一个最小节点编号yyy,使得xxx到某个黑色节点到最短路径上存在节点yyy.思路:我们把第一个变成黑色节点到点 设为根节点,然后求出根节点到所有点的路径上到最小节点编号,设为数组fff,那么如果没有其他黑点的话,那么f[x]f[x]f[x]就是询问点xxx的答案了。如果存在别的黑点xxx,那么显然xxx...原创 2020-01-03 16:22:22 · 115 阅读 · 0 评论 -
AtCoder Beginner Contest 146 E - Rem of Sum is Num(思维)
题目链接给你一个长度为nnn的序列,和一个kkk.询问你有多少个区间[l,r][l,r][l,r],满足∑i=lrai mod k=r−l+1\sum_{i=l}^ra_i ~~mod~~k=r-l+1∑i=lrai mod k=r−l+1我们把题目要求的式子转化一下就是∑i=lrai−(r−l+1)...原创 2019-11-28 12:27:10 · 368 阅读 · 1 评论 -
2019-2020 ICPC, Asia Jakarta Regional Contest E. Songwriter(贪心)
题目链接大意:给你一个序列aaa,让你构造序列bbb满足以下条件bi>bi+1,if(ai>ai+1)b_i>b_{i+1},if(a_i>a_{i+1})bi>bi+1,if(ai>ai+1)bi<bi+1,if(ai<ai+1)b_i<b_{i+1},if(a_i<a_{i+1})bi<bi+1,if(ai...原创 2019-11-04 15:06:38 · 329 阅读 · 0 评论 -
Educational Codeforces Round 50 (Rated for Div. 2) B. Diagonal Walking v.2 (思维)
题目链接大意:给你一个目标点,让你从(0,0)出发走k步到(n,m),(8个方向),问你最多能走几次斜着的,或者不能到思路:我们思考一下我们该怎么走,显然我们上来先斜着走到一个坐标为0,(从(n,m)到(0,0) ),然后我们看剩余的步数last和剩下的k,的奇偶关系。(首先要满足能走到的条件)如果两个都是偶数的话,我们显然可以直接走完k步如果last是偶数但是k是奇数的话,我们显然要把之...原创 2019-09-16 15:53:22 · 132 阅读 · 0 评论 -
hdu5358 ( First One )数学+思维
题目链接题意:让你求这个公式的值。思路:公式中最重要的就是对数,对2取对数并向下取整,那么答案就是一块一块的.我们遍历每一个左端点lil_ili,对每种可能的取对数得到的值进行讨论。假设当前对数值是xxx,那么xxx贡献的区间x,yx,yx,y满足一个条件sum[x]−sum[li−1]>=2xsum[x]-sum[l_i-1]>=2^xsum[x]−sum...原创 2019-04-30 20:27:33 · 338 阅读 · 0 评论 -
Codeforces Round #245 (Div. 2)A. Points and Segments (easy)(思维)
题目链接大意:给你一系列的点和区间,给每个点上一种颜色(共两种颜色),要求每个区间内的两种颜色数量的差不超过1.思路:先排序从小到大,然后按奇偶这样分布不同的颜色。这样就保证每个区间内的颜色差不超过1.妥妥的降智题啊。#include<bits/stdc++.h>#define LL long long#define fi first#define se second...原创 2019-05-06 15:03:33 · 181 阅读 · 0 评论 -
codeforces468A 24 Game
题目链接给你一个nnn,让你构造n−1n-1n−1个式子使得最后剩余一个242424。首先24=2∗3∗424=2*3*424=2∗3∗4,当n<4n<4n<4时无解。n>4n>4n>4时必有解。我们分奇偶进行讨论。1.偶数时,我们对l,l+1,(l>4)l,l+1,(l>4)l,l+1,(l...原创 2019-05-01 16:34:39 · 256 阅读 · 0 评论 -
Codeforces Round #261 (Div. 2) C. Pashmak and Buses(思维+构造)
题目链接大意:n个人,d天,每个人每天都要乘车,要求任何两个人不会d天都在同一辆车上。思路:转化问题,即使任意两个人d天乘车所组成的d位k进制数不同。(一列一列看)。然后就好写了,转化成大数加法。当前列的数为前一列加一。显然的d位k进制数共有kdk^dkd个,判断是否不小于n即可。细节见代码。#include<bits/stdc++.h>#define LL long ...原创 2019-05-07 18:14:12 · 151 阅读 · 0 评论 -
蓝桥杯 历届试题 地宫取宝 递推
题目链接思路:考虑递推f[i][j][a][b]f[i][j][a][b]f[i][j][a][b]表示,表示第i,ji,ji,j个宝藏选了aaa个,其中最大是bbb的方案数。每个宝藏都有两种,选或者不选。初始条件为:f[1][1][0][0]=f[1][1][1][a[1][1]]=1f[1][1][0][0]=f[1][1][1][a[1][1]]=1f[1][1][0][0]=f[1]...原创 2019-05-15 16:03:43 · 278 阅读 · 0 评论 -
AtCoder Regular Contest 102 C - Triangular Relationship 思维
题目链接大意:给你两个数n,kn,kn,k,让你求出有序三元组(a,b,c)(a,b,c)(a,b,c),且满足a+b,b+c,a+ca+b,b+c,a+ca+b,b+c,a+c都是kkk的倍数。思路:显然,若要满足条件,三元组必须满足:1.每个数都是k的倍数或者2.在模k意义下,三元组至少有两个相同。那么就好做了 。先预处理出每种模k意义下数字的数量,然后直接统计即可。细节见代码...原创 2019-05-11 19:51:31 · 222 阅读 · 0 评论 -
AtCoder Beginner Contest 128 E - Roadwork stl+思维
题目链接大意:给你一系列的障碍物的信息(出现位置和时间),然后给你一系列的人的出发时间(从零坐标开始),问你每个人最多能走多远。思路:我们可以换个方式思考,不考虑人,考虑每个障碍物可以挡住哪些人,先将障碍物按坐标从小到大排序,然后将所有的人存进set中,遍历所有的障碍物,每次二分查找位置[li,ri)[l_i,r_i)[li,ri),左闭右开的障碍物区间,(事先将障碍物的存在时间减去坐标,...原创 2019-06-07 12:37:35 · 455 阅读 · 0 评论 -
Educational Codeforces Round 67 (Rated for Div. 2)D. Subarray Sorting(线段树+思维)
题目链接大意:给你两个数组a,ba,ba,b,第一个数组可以将任意子数组按非递减顺序排序,问你是否能变成第二个数组思路:先将aaa数组建一个最小值线段树,然后我们遍历bbb数组,显然对于每个bib_ibi,我们需要一个下标最小的等于当前元素的aka_kak来移动到iii这个位置,那么我们先考虑b1b_1b1,显然,要想aaa数组与b1b_1b1匹配的数可以移动到111位置,那么aka_...原创 2019-07-02 15:29:53 · 164 阅读 · 0 评论 -
hdu6567 Cotree (树dp换根+思维)
题目链接大意:给你两个不连通的树,让你加一条边,使得两个树联通,并且使得∑in∑i+1ndis(i,j)\sum_i^n\sum_{i+1}^ndis(i,j)∑in∑i+1ndis(i,j)最小。思路:首先我们需要一个dfs将两个联通块的点求出来,然后再用一个dfs求出以每个点的子节点个数,和每个点的子节点的dis之和,用两个数组,cnt数组记录子节点个数,dp数组记录子节点的dis之和...原创 2019-07-21 22:34:00 · 715 阅读 · 0 评论 -
hdu6627 equation(讨论)
题目链接题意:给你一个一个式子∑i=1n∣ai∗x+bi∣=c\sum_{i=1}^n|a_i*x+b_i|=c∑i=1n∣ai∗x+bi∣=c,让你求出x的所有解,从小到大排序。思路:因为给的n个一次函数的零点是唯一的,我们对n个函数按照零点从大到小排序,然后遍历n个点,显然当遍历到k时,[1,k]都会取得相反数,然后我们判断当前解是否合法,再判断是否是无穷多解。讨论完成之后就是对所...原创 2019-08-06 10:28:41 · 374 阅读 · 0 评论 -
Comet OJ - Contest #8 C.符文能量
题目链接思路:我们考虑合并区间[l,r],r>l[l,r],r>l[l,r],r>l在不精炼的情况下的贡献是一定的,我们用数组AAA记录这个的前缀和,用数组LLL记录以iii结尾的精炼一个后缀的最小贡献,那么L[i]=min(L[i−1]+k∗k∗p[i−1].b∗p[i].a,A[i−1]+k∗p[i−1].b∗p[i].a)L[i]=min(L[i-1]...原创 2019-08-12 21:26:56 · 139 阅读 · 0 评论 -
Codeforces Round #524 (Div. 2)D. Olya and magical square
题目链接大意:给你一个2n∗2n2^n*2^n2n∗2n的正方形,你每次可以选择一个边长大于1的正方形等分成四份,现在让你切k次,使得左下角到右上角存在一个路径,路径上的正方形边长都相同。思路:枚举边长,判断k是否在最小最大的范围内推荐这个博客#include<bits/stdc++.h>#define LL long long#define fi first#defi...原创 2019-08-13 11:44:18 · 143 阅读 · 0 评论 -
2019牛客暑期多校训练营(第九场)E.All men are brothers(数学)
题目链接大意:现在有n个人,每个回合都有一对人成为朋友,让你在首回合开始前和每回合结束后输出选4个人,每个人都不是朋友的方案。思路:显然正着的情况我们不好讨论,我们可以计算出不合法的情况,然后用全部的减去不合法的。全部的显然是C(n4)C(_n^4)C(n4),不合法的情况我们分几类出来x表示朋友组的人数1.从所有大于等于2的一组朋友选2个人,另外的随便选两个∑x≥2C(x2)∗C(...原创 2019-08-17 11:10:10 · 244 阅读 · 0 评论 -
hdu6709 Fishing Master(思维+贪心)
题目链接大意:给你n条鱼每条鱼需要煮的时间,和抓一条鱼的时间k,你每次只能抓一条鱼,煮一条鱼,问你最少多久煮完所有的鱼。思路:显然我们必须花k的时间抓第一条鱼,而且煮鱼的时间是不能减少的,问题就是我们需要浪费多长时间,那么如果煮鱼的时间可以抓完所有的鱼,那么我们就不需要浪费时间,煮鱼时间内我们可以抓∑aik\sum\frac{a_i}{k}∑kai如果≥n−1\geq n-1≥n−1...原创 2019-08-27 17:38:44 · 535 阅读 · 0 评论 -
2019南京网络赛A 树状数组+思维
官方题解:代码如下:#include<bits/stdc++.h>#define fi first#define se second#define mp make_pair#define pb push_back#define LL long long#define pii pair<int,int>#define SZ(x) (int)x.siz...原创 2019-09-03 14:59:36 · 200 阅读 · 0 评论 -
atcoder abc140E (计算贡献)
题目链接大意:让你∑i=1n−1∑j=i+1nvalue(i,j)\sum_{i=1}^{n-1}\sum_{j=i+1}^nvalue(i,j)∑i=1n−1∑j=i+1nvalue(i,j),其中value(i,j)value(i,j)value(i,j)为区间第二大的数思路:...原创 2019-09-09 21:56:50 · 367 阅读 · 0 评论 -
小米oj-找小“3” 模拟+思维
题目思路:由于数位最大为10,所以我们可以分出所有3出现位置和个数的所有情况,最多也就2102^{10}210种情况,然后对每种可行情况进行dfsdfsdfs.dfsdfsdfs进行的每一层说明,前面0−now0-now0−now都是跟给定的数字相同的,那么当前这一位就有两种取法,一个是小于给定的数字,一个是等于给定的数字。1.1.1.小于给定的数字我们好解决,后面的位置没有被3放的位置我们...原创 2019-04-29 00:18:56 · 186 阅读 · 0 评论