摘要:题目大意:有n个怪物,占成一个圈,然后每一一个怪物都有一定的生命值和爆破值,如果该怪物死了,那么会发生生爆炸会对下一个位置的怪物造成爆破值的伤害,没一发子弹可以打掉怪物1点生命值,问杀死这么多怪物,最少需要几发子弹。 题解:每个怪物有3种死法,第一种直接被子弹打死,第二种,直接被炸死,第三种,没炸死
阅读全文
04 2020 档案
摘要:题目大意:有n个怪物,占成一个圈,然后每一一个怪物都有一定的生命值和爆破值,如果该怪物死了,那么会发生生爆炸会对下一个位置的怪物造成爆破值的伤害,没一发子弹可以打掉怪物1点生命值,问杀死这么多怪物,最少需要几发子弹。 题解:每个怪物有3种死法,第一种直接被子弹打死,第二种,直接被炸死,第三种,没炸死
阅读全文
摘要:题目大意:任意时间x,选择任意个数任意位置的元素,加上pow(2,x-1),最终要求数组单调不下降。 题解:题目要求数组不下降,如过说arr[i]<arr[i-1],我们尽量让arr[i]==arr[i-1],因为二进制可以表示任何数字,所以我们求出来arr[i]和arr[i-1]之间的最大差距,然
阅读全文
摘要:1 什么是差分约束系统 设有一组不等式: 不等式的特点是 xi-xj<=Ck.(当然大于等于也可以,因为乘以个-1就可以变换,单纯的小于的话,要让Ck-1转换为小于等于),我们把这样的不等式组成为差分约束。 这个不等式组要么有无穷多解,要么无解。假设存在一组解{x1,x2,x3,x4,x5},那么{
阅读全文
摘要:题目大意:一段数字组成的字符串,然后从对数(i,j)要求从i到j的数字组成的整数是2019的倍数.然后求(i,j)的对数. 题解:再一次被自己菜到。我一开始想的是从前往后走,然后乘10去余,当遇到相同的余数时,就可以确定2019的倍数了。 但是这样行不通, 因为中间数字可能会出现交叉现象,比如说样例
阅读全文
摘要:这个题牛逼里很呐!!! 题目大意:无非就三个条件: 条件1 :第一行从2到n相加为1 条件2 :第n列从第一行到倒数第二行的数相加为1 条件3:除了第一列和第一行还有第n列和第n行的和没有要求外,其余第i行相加要等于第i列相加。 题目要求最小的ΣCij * X ij(1 <= i,j <= n) 我
阅读全文
摘要:题目大意:这个题的题目大意不好理解,有n个数,然后向一个数组里填数,首先这个数组arr是空的,有一个R数组和count数组,R[j]的值是从j到n,如果arr[i]为空,i保证最小,那么R[j]=i,如果找不到这样的i,那么R[j]就让他空着。count数组,count[i]表示位置i出现的次数。从
阅读全文
摘要:题目大意:一共有n层平面,每一层平面都有一定数目的点(也有可能某一层没有点),从x层到x+1层和从x+1层到x层的花费均为c,除此之外,还有m条边,不同层之间的点也有可能有边,每一条边都有一定的花费,然后问从1到n的最少花费? 题解:这个题主要是构图,构图方法有两种。 方法1:将每一层平面看成一个点
阅读全文
摘要:题目大意:每一个城市都有一定的繁荣度,然后给出m条有向边i->j,定义这条边的权值为pow(arr[j]-arr[i],3),然后给你q个询问,每个询问输入一个x。 然后问你点1到x的距离,如果小与3或者不可到达,那么输出?,否则的话就输出dis[x]。 题解:如果说这是一个无向图,那么如果这个图内
阅读全文
摘要:1 SPFA()判负环 SPFA()判负环的原理就是在求最短路的过程中,如果存在负环,比如说要求从A到a的最短距离,设为s,但是经过a->c->b->a可以更短,所以如果一直经过a->c->b的话,会一直减小。所以说程序会一直对a进行是松弛,那么最多松弛多少次我们会发现有环呢?,答案是n次(n为点的
阅读全文
摘要:题目大意: n个数字,找出其中至少出现(n+1)/2次的数字,并且保证n是奇数. 题解:这道题数组是不能用的,因为题目没有明确输入的数据范围,比如输入了一个1e9,数组肯定开不了这么大。所以要用map来记录每个数字出现的次数,边输入边记录,然后找到满足题意的数即可。 code: #include<b
阅读全文
摘要:题目大意:有n个DNA序列,构造一个新的序列,使得这n个DNA序列都是它的子序列,然后输出最小长度。 题解:第一次接触IDA*算法,感觉~~好暴力!!思路:维护一个数组pos[i],表示第i个串该匹配第pos[i]个元素。一共有四种可能,A,C,G,T,依次枚举,如果说A和n个串中的第j个串匹配,就
阅读全文
摘要:记得上人工智能课的时候老师讲过一个A*算法,计算估价函数(f[n]=h[n]+g[n])什么的,感觉不是很好理解,百度上好多都是用逆向BFS写的,我理解的逆向BFS应该是从终点状态出发,然后把每一种状态打表列举出来,最后O(1)查询就可以了。这种办法确实挺好,但是不会....。 这位大佬用的双向BF
阅读全文
摘要:题目大意都比较简单,用vector存一下图,然后爆搜就可以了。 #include<bits/stdc++.h> using namespace std; const int N=1e3+7; vector<int >ve[100]; bool mark[N]; int path[N]; string
阅读全文
摘要:题目大意:从n个数里边选n/2个数,问和最大是多少。 题解:这是一个比较有意思的DP,定义状态dp[i][1],表示选了第i个数的最优状态,dp[i][0]表示没有选第i个数的最优状态。 状态是如何转移的呢? 1 2 3 4 5 6 7.... 假设考虑到第7个数,前7个数我们要选7/2=3个数。
阅读全文
摘要:题解:这个题目看着挺吓人的,如果仔细想想的话,应该能想出来。题解还是挺好的理解的。 首先设gcd(a1,a2,a3...an)=i,那么a1~an一定是i的倍数,所以ai一共有k/i种取值。有n个数,所有就有(k/i)^n种情况。光是这样还是不行的,因为a1~an的gcd可能为j*i。所以我们要减去
阅读全文
摘要:Hash记录字符串模板: mod常常取1e9+7,base常常取299,,127等等等....有的题目会卡Hash,因为可能会有两个不同的Hash但却有相通的Hash值...这个时候可以用双Hash来判断。Hash值还是很巧妙的... ll getHash(ll x,ll y){ return (H
阅读全文
摘要:unordered_map<int ,int >mp; unordered_map是基于hash表实现的,查找元素的复杂度可以达到o(1),查找n个元素,复杂度为o(n)。 map是基于红黑树实现的,查找的复杂度为o(log(n)),查找n个元素,复杂度o(nlogn)。 总的来说如果只是记录元素的
阅读全文
摘要:题面在此 题解:将字符串分成k部分,然后求最长前缀,所以我们只关注前缀部分就好了,公共前缀后边的是啥不用管,那么问题就转化成了是否存在k个不相交的字符串的最长公共前缀问题。首先用Hash来记录一下字符串,然后再二分枚举最长前缀的长度。怎么样才能保证不相交呢?可以用map记录一段字符串的右边界。然后当
阅读全文
摘要:题目大意比较简单,就是求一堆(二元组)的异或和。 思路:按位考虑,如果说第k位为1的话,那么一定有奇数个(二元组)在该位为1。二元组内的数是相加的,相加是可以进位的。所以第k位是0还是1,至于k为后边的数有关,所以我们直接(1<<(k+1))取模。取模后每个数的取值范围就是[0,2^(k+1)-1]
阅读全文
摘要:题解:设有一条边x->y,数组dis1[i]表示从1到i的最短距离,dis2[i]表示从n到i的最短距离。 1 如果说将x->y反向之前没有经过x->y,但是反向后我经过了x,y说明找到了一个更优的路径,那么反向后的答案就是dis1[y]+dis2[x]+(x,y),如果说反向后我没有经过 x->y
阅读全文
摘要:题目大意:一个n*m的棋盘上有k个棋子,k个棋子相互关联,可以一起向上向下向左向右,当碰到边界时,如果继续移动会发生越界,那么该棋子会保持不动,其余棋子继续移动。问能否在2*n*m的移动次数内,使各个棋子到达其约定的位置。 题解:将所有的棋子汇集于一点,然后蛇形遍历棋盘复杂度为n*m+n+m-3。(
阅读全文
摘要:题目大意:求好数组的个数,所谓好数组 1好数组是原数组的一段连续的子数组,2 好数组不包含元素和为0的子数组。 题解:唉,这个题目把我给些懵了....我一开始的想法求后缀和,保存位置,然后枚举前缀和,二分查找大于当前位置的第一个后缀合,但是ai的范围太大了,位置保存不了,然后又瞎搞了很久....最后
阅读全文
摘要:这是一个非常经典的带权并查集,有两种写法。 1 边权并查集 规定一下,当x和y这条边的权值为0时,表示x和y是同类,当为1时,表示x吃y,当为2时,表示x被y吃。 一共有三种状态,如图,当A吃B,B吃C时,C必须吃A,路径压缩后,A被C吃。 然后就是带权并查集的模板了。 判断条件,当x和y在同一颗树
阅读全文
摘要:关于带权并查集,到目前为止,基本上可以分为两类,一种是点权,另一种是边权,顾名思义,就是把权重加在点上或者边上。 1 点权。点权并查集的操作是在unite中操作的,在并查集中我们想要维护的值一般都在根上,比如说要维护一树上的最大值。 因为我们维护的最大值信息都在跟上,左边那颗树根RA保存了树1的最大
阅读全文
摘要:点权并查集的反向离线操作 题目大意:有n个stars,每一个都一定的“颜值”。然后stars与stars之间可以相连,query c表示再与c相连的stars中,颜值比c高的,stars的标号,如果有多个, 输出最小那一个。destroy x y,表示将x和y这条边销毁掉。 题解:并查集只能加边不能
阅读全文
摘要:题目大意:n个物品,每个物品有一定的保质期d和一定的利润p,一天只能出售一个物品,问最大利润是多少? 题解:这是一个贪心的题目,有两种做法。 1 首先排序,从大到小排,然后每个物品,按保质期从后往前找,找到第一个没被占用的日期,然后出售。 code: #include<cstdio> #includ
阅读全文
摘要:例题: poj 1308 题目大意比较简单,对任意两个点,有且仅有一条道路,也就是一棵树。 题解:一棵树中,肯定是不能有环的,而且只能由一个根节点。(没认真读题,只知道在那里判环。。。。),所以这个题先判环然后就是判根节点的唯一性。 //#include<bits/stdc++.h> #includ
阅读全文
摘要:这个题目的写法有很多,用二分图染色也可以写,思路很好想,这里我们用关于并查集的两种写法来做。 题目大意:输入x,y表示x和y交配,然后判断是否有同性恋。 1 带权并查集: 我们可以用边的权值来表示一种关系,比如说 我们可以设权值为1,假如A和B发生关系,B和C发生关系,那么C到A的距离就是2,如果A
阅读全文
摘要:题目大意:有一个区间,长度为n,然后跟着m个子区间,每个字区间的格式为x,y,z表示[x,y]的和为z。如果当前区间和与前面的区间和发生冲突,当前区间和会被判错,问:有多少个区间和会被判错。 题解:x,y,z表示从x开始到y的所有数字的和,那么x-1就表示从(x-1,y]的区间和。我们可以对区间的左
阅读全文
摘要:题目大意:有n台坏掉的电脑,给出每台电脑的坐标,然后每次询问输入0(字符) x,表示电脑x恢复正常,输入S x y 询问x和y是否可以联网。只要是x和y的距离小于距离d,那么就可以联网,如果有个中介c使得x到c的距离小于d,y到c的距离小于d,那么x和y也可以联网。 题解:当修复好一台电脑后,然后判
阅读全文
摘要:题目大意:当输入2时,将p处的点的值修改为x, 当输入1时,判断区间[L,R]的gcd是否几乎正确,几乎正确的定义是最多修改一个数,使得区间[L,R]的gcd为x。 题解:用线段树维护一个gcd数组,在查询的时候,线段树的查询本质就是不停的分块,这时我们可以添加一些剪纸,比如说,对一个根节点root
阅读全文
摘要:离散化的定义:离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。(by百度百科) 为什么要离散化处理?打个比方,某个题目告诉你有10^4个数,每个数大小不超过10^10,要你对这些数进行操作,需要开10^10的数组,当然这是不可能的,但是10^4的范围就完全没问题。 我们可
阅读全文
摘要:题目大意:一个字符串只含有? ( ),?可以变成 ) 或者 ( ,将字符串中所有的?变成) 或者 ( 使得字符串合法。 合法就是让括号配对,并且不可以提前结束比如:()()这样是不合法的。 题解:既然不能提前结束,那第一个字符必须和最后一个匹配,所以我们只要关注从2~n-1就可以了。 我们可以正着扫
阅读全文
摘要:题解:求n^k的前三位和后三位。 后三位直接快速幂对1000去余就可以了。前三位可以转换成浮点数来操作,也是用快速幂,我们只保留答案的前三位,当前值大于1000.0的话就除以10,直到结果小于等于1000.0。 #include<bits/stdc++.h> using namespace std;
阅读全文
摘要:一个让人脑洞大开的题。 题目大意比较简单,询问[1,n]有多少个数其因子和为偶数。 因子分解定理中求因子和的公式是 f(n)=(1+p1+p1^2+p1^3+...+p1^a1)(1+p2+p2^2+...+p2^a2).... 如果让因子和为偶数,首先我们看一下两个数相乘怎么才能得到偶数: 1 e
阅读全文
摘要:题解:这道题要从n的角度来考虑i和j。 n可以表示为n=a1^p1*a2^p2*a3^p3......。n=lcm(i,j),那么质因子a1^p1,a1可以在i或者j中,并且p1=max(a1i,a1j)即pi为i中ai和j中ai的最大值。假设a1在i中,对于质因子a1,b中有[0,p1],一共有p
阅读全文
|