![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
思维题
文章平均质量分 87
【linux嵌入式】玩家
linux嵌入式玩家
展开
-
一些优秀的想法。
四个关键字排序。越里层优先级越低。bool cmp(node a,node b){ if(a.x == b.x){ if(a.y == b.y){ if(a.z == b.z){ return a.index < b.index; } return a.z < b.z; } return a.y > b.y; }原创 2020-12-19 13:59:49 · 180 阅读 · 1 评论 -
Codeforces #665 D. Maximum Distributed Tree(贪心+思维)
题目大意:给定一颗树,现在你需要在n−1n-1n−1条边上加权,使得∑i=1i=n−1∑j=i+1j=nf(i,j)\sum_{i=1}^{i=n-1}\sum_{j=i + 1}^{j=n}f(i,j)∑i=1i=n−1∑j=i+1j=nf(i,j)最大。f(i,j):f(i,j):f(i,j):表示顶点iii到顶点jjj一条简单路径的边权之和。有三个限制:1.1.1.所有边权的乘积为kkk2.2.2.边权>1>1>13.3.3.边权为111的边尽可能的少。思路:..原创 2020-10-13 12:57:58 · 208 阅读 · 0 评论 -
Educational Codeforces Round 96 (Rated for Div. 2)(A-E题解)
题目大意:给你一个nnn,求解3x+5y+7z=n3x+5y+7z=n3x+5y+7z=n的解。思路:暴力枚举即可。代码:#include<iostream>#include<vector>#include<cstring>#include<algorithm>#include<map>#include<set>#include<stack>#include<queue>using ..原创 2020-10-12 16:39:45 · 181 阅读 · 1 评论 -
Codeforces Round #615 (Div. 3) (题解)
题目大意:给你三个数,用另外一个数n加到这三个数中去,看能不能使得他们相等。思路:先对齐,即都先加到三个数中最大数的大小,然后看剩余的数模333是否为0。代码:#include<iostream>#include<vector>#include<cstring>#include<map>#include<set>#include<algorithm>using namespace std;typedef lo.原创 2020-10-06 14:15:56 · 212 阅读 · 0 评论 -
C. Boboniu and Bit Operations(二进制,暴力,思维)
题面大意:给你nnn个序列aiaiai,mmm个序列bibibi,现在要你构造一个ccc数组,其中ci=aici=aici=ai&bibibi,求min(c1∣c2∣c3∣...∣cn)min(c1|c2|c3|...|cn)min(c1∣c2∣c3∣...∣cn)。思路:首先我们可以发现一个这样的性质,假设答案是sss。对于任意的cicici,都有ci∣s==sci|s==sci∣s==s。因为s=[0,1e9]s=[0,1e9]s=[0,1e9],n,mn,mn,m都很小,我们可以O..原创 2020-08-13 12:38:35 · 283 阅读 · 0 评论 -
Codeforces Round #656 (Div. 3)(ABCDE题解)
题面大意:给你x,y,zx,y,zx,y,z,并且满足x=max(a,b),y=max(a,c),z=max(b,c)x=max(a,b),y=max(a,c),z=max(b,c)x=max(a,b),y=max(a,c),z=max(b,c),要你输出a,b,ca,b,ca,b,c。思路:通过观察可以发现要满足上面的式子必然存在两个或者以上的最大值。然后就可以分三种情况讨论x=y,x=z,y=zx=y,x=z,y=zx=y,x=z,y=z,对于不同的情况令最大值为它们相同的那个数,然后次大值..原创 2020-07-18 23:04:55 · 185 阅读 · 0 评论 -
Codeforces Round #651 (Div. 2)(ABCDE题解)
题面大意:给你一个nnn,要你找两个数a,b(a<b<=n)a,b(a<b<=n)a,b(a<b<=n),求max(gcd(a,b))max(gcd(a,b))max(gcd(a,b))。思路:直接取b=nb=nb=n,然后a=n/2a=n/2a=n/2就行了,所以答案是n/2n/2n/2,如果为奇数n−−n--n−−。代码:#include<iostream>using namespace std;void solved(){ in.原创 2020-07-17 13:54:04 · 165 阅读 · 0 评论 -
Educational Codeforces Round 91 (Rated for Div. 2)(ABCD题解)
题目大意:要你找到1<=i<j<k<=n1<=i<j<k<=n1<=i<j<k<=n并且aj>ai,aj>akaj>ai , aj>akaj>ai,aj>ak。思路:直接暴力就行了。代码:#include<iostream>#include<algorithm>#include<map>#include<vector>#includ..原创 2020-07-16 18:22:59 · 254 阅读 · 0 评论 -
Codeforces Round #655 (Div. 2)(ABCD题解)
题目大意:给你一个nnn,要你构造一个长度为nnn的数组使得ai+aj!=azai+aj!=azai+aj!=az。思路:直接构造nnn个xxx即可,xxx可以取任意数,我这里xxx取的222。代码:#include<iostream>using namespace std;typedef long long int ll;const int maxn = 2e5 + 10;void solved(){ int n;cin>>n; for(in..原创 2020-07-15 12:46:12 · 188 阅读 · 0 评论 -
2020牛客暑期多校训练营(第二场)(BCDF题解)
题目大意:给你两个时间,要你求他们差了多少秒。思路:python的datetime搞搞就好了。代码:import datetimeif __name__ == "__main__": d1 = input() d2 = input() d1 = datetime.datetime.strptime(d1, "%H:%M:%S") d2 = datetime.datetime.strptime(d2, "%H:%M:%S") if(d1 > d2):.原创 2020-07-14 15:46:26 · 273 阅读 · 0 评论 -
Educational Codeforces Round 90 (Rated for Div. 2)(ABCD题解)
题目大意:有两个麦甜甜圈的店铺,第一个只单卖,价格是aaa元一个,第二个店铺是整箱卖,一箱bbb个ccc元,只能整箱卖,问你在第一个店铺买多少甜甜圈比第二个店铺便宜,如果不能输出-1,问你在第二个店铺买多少甜甜圈比第一个店铺便宜,如果不能输出-1。思路:如果a<c:a < c:a<c:说明第一个店铺单价低于第二个店铺输出数量111即可,否则−1-1−1。如果c/b<ac/b<ac/b<a:说明第二个店铺单价低于第一个店铺,把bbb移过去,就是a∗ba*ba∗b..原创 2020-07-11 17:52:35 · 308 阅读 · 1 评论 -
Codeforces Round #654 (Div. 2)(ABCDE题解)
题目大意: 给你一个[1,n],n[1,n],n[1,n],n个数,问你最多能组成多少相同的数。思路:很显然(1,n−1),(2,n−2),....(1,n-1),(2,n-2),....(1,n−1),(2,n−2),....这样就行了,答案就是(n−1)/2+1(n-1)/2+1(n−1)/2+1。代码:#include<iostream>using namespace std;typedef long long int ll;void solved(){ ll n;..原创 2020-07-11 00:11:38 · 220 阅读 · 0 评论 -
Codeforces Round #653 (Div. 3)(ABCDE题解)
题目大意:给你x,y,nx,y,nx,y,n,要你在[1,n][1,n][1,n]内找到最大numnumnum的数满足numnumnum % x=yx=yx=y。思路:一开始想的枚举xxx的倍数,然后超时了,就只能往数学的方向思考了,满足要求的最大的数一定是分布的nnn那里,所以我们可以直接n−(nn-(nn−(n%x)+yx)+yx)+y就行了,意思是用nnn减去超过xxx的那一部分,那么剩下的一定%x=0x=0x=0,所以再加上yyy就行了,不过有可能n−(nn-(nn−(n%x)+yx)+y..原创 2020-07-08 11:34:49 · 185 阅读 · 0 评论 -
单调栈专题
最近稍微补了一下单调栈的习题(虽然以前做过),加深一下理解。力扣84 :柱状图中最大的矩形思路:首先考虑一下暴力的做法,枚举每根柱子,它能延申的面积 = 左右两边第一个小于他的数组成的宽 * 这个数的值。就类似与中间这个黄色的柱子,大于它的都可以延申,直到小于它的就不行,所以这个题目就转化成了枚举每个柱子,并且求每个柱子左右两边第一个小于它的数的位置。我们可以类似用双指针的写法写一个O(n^2)的做法代码:class Solution {public: int largestRec原创 2020-05-29 17:13:38 · 194 阅读 · 0 评论 -
D. Multiset(权值线段树 or 树状数组+二分)Educational Codeforces Round 87 (Rated for Div. 2)
题目大意:给你一个长度为nnn的序列,以及qqq次询问qiqiqi,如果qi>0qi>0qi>0,在序列中插入qiqiqi,如果qi<0qi<0qi<0,在序列中删除第∣qi∣|qi|∣qi∣大的数,问你qqq询问后,如果序列中为空,输出000即可,否则输出序列中任意一个数即可。思路:所有操作无非就是删除第kkk大数,增加第kkk大数,我们可以用桶排序的思路建立线段树我们称为它为权值线段树,这个题n=1e6n=1e6n=1e6用权值线段树时间复杂度O(nlogn..原创 2020-05-19 14:48:11 · 183 阅读 · 0 评论 -
Codeforces Round #643 (Div. 2)(A-E)题解
题目大意:给你一个a1a1a1,要你求akakak,其中ai=ai−1+maxdigit(ai−1)∗mindigit(ai−1)ai=ai-1+maxdigit(ai-1) * mindigit(ai-1)ai=ai−1+maxdigit(ai−1)∗mindigit(ai−1),maxgigit(123)=max(1,2.3)=3maxgigit(123)=max(1,2.3)=3maxgigit(123)=max(1,2.3)=3。思路:这题一开始我项会不会有循环节,因为样例a2和a7的ma..原创 2020-05-16 23:40:16 · 217 阅读 · 0 评论 -
NC53681 「土」巨石滚滚(贪心)
NC53681「土」巨石滚滚题目描述帕秋莉掌握了一种土属性魔法她使用这种魔法建造了一个大型的土球,并让其一路向下去冲撞障碍土球有一个稳定性x,如果x < 0,它会立刻散架每冲撞一个障碍,土球会丧失ai的稳定性,冲撞之后,又会从障碍身上回馈bi的稳定性帕秋莉想知道,如果合理的安排障碍的顺序,在保证土球不散架的情况下,是否可以将障碍全部撞毁呢?输入描述输入一个整数T,代表T组数据,每组数据中:前一行两个整数n , m,表示障碍个数和土球的稳定性接下来一行两个整数,分别表示障碍的ai和b原创 2020-05-16 11:25:56 · 173 阅读 · 0 评论 -
Codeforces Round #642 (Div. 3)(A-E题解)
这场虽然只写了4题但是打的还是比较舒服的,除了T2粗心WA一发,其他都是一次AC还是比较舒服,开局也不错,20分钟切了两题。题目大意:要你构造一个长度为nnn的数组,使得它们的和等于mmm,并且要你最大化∑i=0i=n−1∣a[i]−a[i+1]∣\sum_{i=0}^{i=n-1}|a[i]-a[i+1]|i=0∑i=n−1∣a[i]−a[i+1]∣思路:很显然的一个题。分类讨论一下。n=1n=1n=1:直接输出0即可。n=2n=2n=2:输出mmm即可。n>=3n>=3n&原创 2020-05-15 09:56:16 · 225 阅读 · 0 评论 -
F. SUM and REPLACE(线段树+思维+剪枝)
题目大意:先定义一个D(i):i的因子个数D(i):i的因子个数D(i):i的因子个数,现在给你一个序列,你要做两种操作,操作1:将[l,r]中的ai用d(ai)1:将[l,r]中的ai用d(ai)1:将[l,r]中的ai用d(ai)替换。操作2:2:2:求区间[l,r][l,r][l,r]所有数字和。思路:这题与D. The Child and Sequence是一个套路,注意到将d(...原创 2020-05-07 19:03:55 · 225 阅读 · 0 评论 -
D Bash and a Tough Math Puzzle(线段树+思维+剪枝)
题目大意:给你一个序列,你要在这个序列上进行mmm次操作,操作1:l,r,x1:l,r,x1:l,r,x表示判断是否序列区间[l,r][l,r][l,r]中所有数的gcd()=xgcd()=xgcd()=x,如果不等于你可以修改其中一个数的值。操作2:i,y将ai=y2:i,y将ai= y2:i,y将ai=y。思路:注意到q=4e5q=4e5q=4e5也就是说你的所有操作要在O(log...原创 2020-05-07 13:31:12 · 202 阅读 · 0 评论 -
D. The Child and Sequence(线段树+思维)
题目大意:给你一个序列,你要在这个序列上进行操作。操作1:1:1:给定区间[l,r][l,r][l,r],对序列中这个区间的所有数ai,i=[l,r]ai,i=[l,r]ai,i=[l,r]求和。操作2:2:2:给你区间[l,r]和x[l,r]和x[l,r]和x,对i=[l,r],aii=[l,r],aii=[l,r],ai mod xxx。操作3:3:3:给你两个数个数i,k,i,k...原创 2020-05-06 20:32:32 · 446 阅读 · 0 评论 -
AtCoder Beginner Contest 166(ABCDE实况)
记录一下今天打abc的实况QAQ。开题A,(还有20分钟吃饭),看题ing。。。???这不是傻逼题嘛?输入abc输出arc,反着一样。。。直接拿掉。看B,em…看题ing。。。n个人k个店铺??嗯。。然后呢?di??啥玩意干嘛的。。好像是要找没有没有去过店铺买零食的人的数量。n,k好小。。。随便搞。噢。。。。di表示第i个商店有来了多少个人,接下来就是人的编号。。。噢。。。那我记录一下每个人去过...原创 2020-05-03 22:04:28 · 151 阅读 · 0 评论 -
Codeforces Round #638 (Div. 2)(A-D题解构造题杀我)
题目大意:有一堆21,22,23,...,2n2^1,2^2,2^3,...,2^n21,22,23,...,2n的数,现在要你把这些数分成两堆,使得每堆的和的差最小。思路:注意到2n>21+22+...+2^n>2^1+2^2+...+2n>21+22+...+222^(n-1)。所以直接用2n+前面n/2−1个最小数2^n + 前面 n/2-1个最小数2n+前面n/...原创 2020-05-02 17:48:41 · 156 阅读 · 0 评论 -
二分答案二分搜索专题
题目大意:给你一个长度为nnn的字符串,只包含a或者ba 或者 ba或者b,现在你可以将aaa换成b,kb,kb,k次,或bbb换成aaa,问你换完后最长的只有包含一个字符的子串长度是多少。思路:先求一下,字符aaa和字符bbb的前缀和,然后枚举起点,二分终点位置。代码:#include<bits/stdc++.h>using namespace std;const...原创 2020-05-01 14:44:49 · 177 阅读 · 0 评论 -
Educational Codeforces Round 86 (Rated for Div. 2)(A,B,C,D题解)
迟到的补题。。。。题意:你可以用花费aaa元,使得xxx或者yyy不同时加111或者减111,你也可以花费bbb元使得x,yx,yx,y同时加111或者减111,问你最少花费多少钱使得x=y=0x=y=0x=y=0。思路:无论你是同时还是单一操作,你都要先使得x=yx=yx=y,然后再考虑使用同时加减还是单一加减更优。代码:#include<bits/stdc++.h>...原创 2020-04-29 11:22:59 · 204 阅读 · 0 评论 -
D - Multiple of 2019(思维)
题目大意:给你一个字符串,要你找到一些子区间使得s[l,r]的在十进制下的值 mod 2019 = 0,现在问你有多少这样的子区间。思路:如果s[L,R] % p = 0,那么必然有 s[L,R] * 10 ^ k % p = 0.如果S[L,N] % p = S[R,N] % p,那么就会有S[L,N] % p - S[R,N] % p = 0 mod p。如果我们需要找到同余下相...原创 2020-04-27 22:09:07 · 464 阅读 · 0 评论 -
Codeforces Round #636 (Div. 3)(A-D题解)
这是一个悲伤的夜晚,做题太慢了,导致d题甚至都没时间做了,早上起来发现C还被踩了。题目大意:给你一个n,还给你一个等式x + 2x + 4x + 8x + …+2^(k - 1)x = n,其中k(>1)思路:一个水题,因为题目保证答案有解,直接枚举k解这个一元方程即可。(一个水题写了20多分钟啊啊。。。还是做题太少)代码:#include<bits/stdc++.h&...原创 2020-04-22 12:27:37 · 247 阅读 · 1 评论 -
建设道路(前缀和优化)
思路:我觉得这个题目有点意思。。。。用一个简单的数学公式展开可以将O(n^2)降到O(n)实属牛皮。sum1是ai的前缀和,sum2是ai ^ 2的前缀和∑i=1n\displaystyle\sum_{i=1}^{n}i=1∑n ∑j=i+1n(ai−aj)2\displaystyle\sum_{j=i + 1}^{n} (ai - aj) ^2j=i+1∑n(ai−aj)2=>...原创 2020-04-19 16:34:02 · 229 阅读 · 0 评论 -
人人都是好朋友(离散化 + 并查集)
思路:并查集基本操作了。。。c为1的先把他们并到同一个集合中,然后再检查c=0的情况,如果他们在同一个集合c又等于0说明矛盾。做这题的时候,出现好多小问题(上次写并查集是去年),首先因为输入量很大,cin会超时,要用scanf,其次因为每次读入两个点所以maxn需要开两倍。就这个两个坑。另外注意到b=1e9这个数很多,开不了这么大,所以需要提前离散化一下。代码:#include<bi...原创 2020-04-19 10:19:59 · 188 阅读 · 0 评论 -
E2. Three Blocks Palindrome (hard version)(枚举+思维+前缀和)
题目大意:给你一个长度为n的序列,要你找出形如aba这样的回文,其中a,b 可以等于0,并且最多只能出现两个不同字符。思路:注意到字符很少,只有200,可以从这里下手,先把[1,200]每个字符的前缀和求出来,再把相同字符的位置存起来,然后枚举200个数,再枚举每个数的长度的一半,然后在当前枚举数的中间找一个最多的一个单的字符这样就行了。需要预处理一下b=0这种情况,也就在只有一个字符时...原创 2020-04-17 23:32:34 · 249 阅读 · 0 评论 -
Codeforces Round #635 (Div. 2)(ABCD题解)
题意:给你三个区间,要你在这三个区间选三条边使得它成为一个三角形。思路:签到题,直接输出一个等腰三角形,b,c,c即可。时间复杂度O(1)代码:#include<bits/stdc++.h>using namespace std;typedef long long int ll;const int maxn = 1e5 + 10;void solved(){ i...原创 2020-04-16 15:50:16 · 140 阅读 · 0 评论 -
D - RGB Triplets(前缀和+思维)
题意很好懂,就是一个长度为n的序列,s[i] 只可能是r,g,b,要你要满足就 j - i != k - j,并且s[i],s[j],s[k]两两不相同,并且i < j < k,的个数有多少个。思路:暴力O(n^3)模拟一遍铁超时,j - i != k - j 一开始一直在观察这个式子看能不能优化一下,事实上可以不管这个式子就一个区间[i,k]={B,R},那么我们在[i + ...原创 2020-04-13 13:14:30 · 434 阅读 · 0 评论 -
树(DP or 组合数学)
题目描述:shy有一颗树,树有n个结点。有k种不同颜色的染料给树染色。一个染色方案是合法的,当且仅当对于所有相同颜色的点对(x,y),x到y的路径上的所有点的颜色都要与x和y相同。请统计方案数。输入描述:第一行两个整数n,k代表点数和颜色数;接下来n-1行,每行两个整数x,y表示x与y之间存在一条边;输出描述:输出一个整数表示方案数(mod 1e9+7)。示例1输入4 31 2...原创 2020-04-07 18:40:57 · 349 阅读 · 0 评论 -
The Lazy Cow(silver)(二维前缀和)
题意:给你一个n* n的矩阵,还有一个k,要你找一个起点坐标,然后上下左右四个方向走k步,然后计算他们的和,使得这个和最大化。思路:一开始写了一个bfs,O(n^4)超时,然后改了一下。然后观察了一下最后我们要求的和是一个菱形,如果这个菱形内的和可以O(1)计算这题O(n ^ 3)就过了,但是菱形的和不太好算,我们让坐标轴旋转45°,这样就变成这个矩形,然后前缀和就可以计算了。旋转45度...原创 2020-03-21 16:59:37 · 257 阅读 · 0 评论 -
Codeforces Global Round 7(A - D题解)
题意:给你一个数n,要你找一个数>0并且它的位数等于n,并且不能被它自己的数整除(比如23,不能被2,和3整除)。思路:一开始构造了一个2222(n-1个2)3,wa了两发(哭了)。后面想起一个定理,只有各位数之和能被3整除这个数才能被3整除,于是我们构造这样一个数233333(n-1个3)即可。因为2只能被偶数整数,排除,各位数之和永远不能被3整除,因为永远多了个2.然后提交就行...原创 2020-03-20 17:10:07 · 385 阅读 · 0 评论 -
D. Ehab the Xorcist(构造+思维)
题意:给你u,v,要你构造一个最短的数组使得数组的各元素异或和为u,总和为v。思路:首先考虑几组特殊的情况u == v == 0返回0即可u == v != 0 返回u即可u > v 返回 -1这都比较简单验证但凡要构造什么东西的题目都是比较难的。这道题我们可以从异或这个运算出发,有一个很重要的性质就是 a ^ a = 0。这个性质告诉我们为了满足异或和等于u,我们总是可以...原创 2020-03-16 11:15:15 · 259 阅读 · 0 评论 -
C. Ehab and Path-etic MEXs(思维+构造)
题意:给你一颗n个点的树,用[0,n-2]去给n-1条边编号,使得mex(u,v)的最大值最小。mex(u,v)表示任意两点的简单路径中不在这条边上的最小非负整数。思路:这个题目好巧妙啊~~~~哈哈哈哈,题目中给了一个很重要的信息被我忽略了,那就是它给出的是一棵树,意味着任意两点有且仅有一条简单路径,这个条件对构造结果很重要。首先我们考虑只要两个点的情况,那么这条边只能标记0,mex(u...原创 2020-03-15 22:42:39 · 340 阅读 · 0 评论 -
D. A and B and Interesting Substrings(前缀和+思维)
题目大意:先输入26个字符[‘a’,‘z’]的权值,然后给你一个字符串,问你满足以下条件的字串有多少个。1:第一个和最后一个字符的子串相等。2:在这个子串中除掉第一个和最后一个字符的权值,剩下的字符权值之和等于0。思路:求一段区间和我们可以用前缀和O(1)解决,但是要在一个串中找所有首位字符相等的字串的时间复杂度是O(n^2),因为N=1e5,这个时间复杂度肯定超时,所有我们要从别的角度...原创 2020-03-14 18:24:31 · 225 阅读 · 0 评论 -
B 牛能和小镇
思路:看到这个题很容易想到(i,j)建边权就是上面的公式然后跑一下最小生成树就出来了。然后N=1e5,克鲁斯卡尔应该不会超时,但是会超空间。事实上这个题目很简单。通过这个式子可以反应出,原本两点之间的距离会依赖于两个点的坐标,但是化简后我们可以发现其实两点之间的距离并不需要依赖两点之间的坐标,一个点的(x,y)坐标我们就可以求出他的权,问题就转化成了,在X轴上有N个点现在我们需要化N-1...原创 2020-03-14 14:45:50 · 153 阅读 · 0 评论 -
B. Count Subrectangles
唉,补题补题,太菜了当时看到这个题一点思路没有。。。。看了大佬的思路才懂。。。唉,还是思维没有练起来得多多刷题咯,(为啥一天天的困得要死)思路:先求出k的所有因子,然后分别从向量a和向量b找连续k的因子个1的数量,然后求出所有的因子就行了。(想不到想不到!!)(至于为什么找连续个稍微用笔画一画就知道了,或者说是乘法原理)代码:#include<bits/stdc++.h>...原创 2020-03-11 22:46:10 · 402 阅读 · 0 评论