随笔分类 - SFOI题单
摘要:**题意:**给你一个不降序序列(序列长度N),然后让你求能够组成的最大的不超过c的值是多少 一开始想的是价值和重量相等的01背包问题,但是发现c的范围是有符号整数[−231,231−1] 改用暴力,基本方法是二进制枚举,但是需要一些剪枝: 如果中间发现sum > c 就return
阅读全文
摘要:暴力出全排列然后求出这种放油的顺序得到的覆盖面积,求所有覆盖面积的最大值,实际做的时候ans保存的是所有半径的平方的和的最大值。 在放一个油滴A的时候,需要和之前放下的油滴B一一比较,如果A和B的距离小于B的半径,那么放不了,否则可能的半径为r(A)=dist(A,B)−r(B),和所有点比较
阅读全文
摘要:经典八皇后,需要用一些标记数组优化对角线、横线 以n=6为例,主对角线(黑)和副对角线(红)各有11(2n-1)条,需要判断一个点(x,y)所在的对角线 公式:idxred=y+x−1,idxblack=y−x+n #include<iostream> usi
阅读全文
摘要:题意:有一个网格图,机器人只能顺着网格的格点走,开始的时候机器人在某一个网格的左上角点上,然后给出机器人初始时面朝的方向(东、南、西、北),然后给出终点(也是某一个网格的左上角点)的位置,然后让你求从机器人当前位置到终点最少需要多少秒。 其中机器人的操作有(分别都是花费1s): 向前走1步 向前走2
阅读全文
摘要:一开始写的**最大生成树,但是没有注意到题目要求每一个石头只能跳一次**,如果生成树长下面这样就不对了(从0开始跳,这个不可能是一次跳完的路径) 所以说,只能用贪心,贪心有几种方式,一种是升序排序,然后再高低来回跳就行了,另一种是建无向图跑最长路,最开始是直接dfs+贪心过了,然后用了dijkstr
阅读全文
摘要:哈夫曼编码之后做的第二个贪心题... #include<iostream> #include<algorithm> using namespace std; const int N = 5010; #define PII pair<int, int> #define int long long PI
阅读全文
摘要:暴搜+剪枝,在打素数表的时候,要注意一下题目的空间范围是500MB(超大...),可能可以打1e8以内的素数表,打表用的是线性筛,空间是4∗108∗210242≈763 MB,然而还是过了 另外还有一个奇坑无比的坑点:1不是素数... #include<
阅读全文
摘要:找最大值:二分到一个n的值t,然后根据日志检查在t的情况下能切几题,如果满足切的题目数>=k,那么所有比t小的值都能够使得切题数>=k,此时可能可以找到n的最大值,因为如果不存在一个t能使切题数正好是k的话,找到的值是最大的能够使切题数>k的值 找最小值:二分到一个n的值t,如果满足切的题目数<=k
阅读全文
摘要:暴力的话,就是两重循环,然后挨个去判断能不能满足,复杂度O(mn),过不了 **思路:二分答案,对于二分到的一个值x,去检查能否满足前x个(包括x)订单,如果能满足,说明前y(y<x)个订单都可以满足,所以可以二分到最大的可以满足到**的订单,但是题目要的是第一个不能满足的订单,所以需要在二分过
阅读全文
摘要:一开始的想法是二分|s−y|的值t,然后根据二分到的值,看是否能够找到一个W,使s−t≤y≤s+t,并且答案具有二段性,因为如果对于t能够找到一个W使得满足条件,那么所有比t大的值,都能够满足存在W使得s−t≤y≤s+t,所以满足二段性,由于是整数二分,一
阅读全文
摘要:暴力方法是把所有路径全部跑一遍,现在只考虑(0,0)位置的门分别走向第n - 1行的所有门的路径,假设只向上向右走,那么(0, 0)到(n - 1, k)的路径条数为Cnk,所以从(0, 0)到第n - 1行所有的门的路径条数总和为$C_{n}{0} + C_{n}{1} + .
阅读全文
摘要:尝试了几次,复杂度为O(R(nlogn+n)),分别用了每轮快排和归并排,极限时间约为50∗200000∗17,时间限制0.5s,TLE。 **思路:**首先按照题目要求把运动员序列a排序,让他们按照1 vs.2,3 vs.4...的方式比下去然后发现每一轮下来整
阅读全文
摘要:这题开始想用循环做,WA了三发,想得太简单了,没有想到有这种情况的嵌套: F ... F ... E F ... E E 所以改用递归,dfs()返回下一层的时间复杂度(下一层所有并列的F中复杂度的最大情况) **注意:**有一个特殊情况就是在出现F i x y当x比y要大的时候,这个循环(不管他里
阅读全文