随笔分类 - 【ACM基本算法】
摘要:【1】LeetCode 136 Single Number 题意:奇数个数,其中除了一个数只出现一次外,其他数都是成对出现,比如1,2,2,3,3...,求出该单个数。 解法:容易想到异或的性质,两个相同的数异或为0,那么把这串数从头到尾异或起来,最后的数就是要求的那个数。 代码如下: 【2】Lee
阅读全文
摘要:思路: 【1】根据前序性质,每一颗子树的前序第一个节点永远是其根节点(后序也有类似性质,所以知道后序中序求前序是一个道理)。 【2】根据中序性质,在中序序列中,某节点之前的节点全在其左边,反之在其右边。 那么我们在前序序列中找到当前树根节点时,再在中序序列中找到树根节点的位置,那么知道中序序列中,在
阅读全文
摘要:题意:一条河岸线y=k,y>k区域有n个敌人,现在要在yS,那么check失败,否则成功。代码:#include #include #include #include #include #include #define ll long longusing namespace std;#define ...
阅读全文
摘要:题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数。解法:分类讨论。设选取k个数。1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四个数(L,L+1,L+2,L+3),这样的话(L^(L+1)) ^ ((L+2)^(L+3)) = 0,最优如果...
阅读全文
摘要:题意:给出两个排列,求出每个排列在全排列的排行,相加,模上n!(全排列个数)得出一个数k,求出排行为k的排列。解法:首先要得出定位方法,即知道某个排列是第几个排列。比如(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0).拿...
阅读全文
摘要:题意: 两个人比赛,给出比赛序列,如果为1,说明这场1赢,为2则2赢,假如谁先赢 t 盘谁就胜这一轮,谁先赢 s 轮则赢得整个比赛。求有多少种 t 和 s 的分配方案并输出t,s。解法: 因为要知道有哪些t,s,那么我们至少要枚举一个量,然后才能得出所有分配方案,由题意似乎枚举 t 比较方便。由于 ...
阅读全文
摘要:题意: 给你一张图,N个点(0~N-1),m条边,国王要从0到N-1,国王携带一个值,当走到一条边权大于此值的边时,要么不走,要么提升该边的边权,提升k个单位花费k^2块钱,国王就带了B块钱,问能携带的最大值是多少。解法: 二分此值,然后BFS跑遍每个点,记录到达每个点的最小花费Mincost,如果...
阅读全文
摘要:题意: 有很多点,从最右下角的点开始走起,初始方向水平向右,然后以后每步只能向左边走,问最多能走多少个点。解法: 贪心的搞的话,肯定每次选左边的与它夹角最小的点,然后走过去。 然后就是相当于模拟地去选点,然后计数,然后走过去。这题就这么搞定了。我这里用了set和vector。代码:#include ...
阅读全文
摘要:题意就不说了,求公式。解法: 稍加推导能够得出 : f(n) = n! * f(n-1) , 即其实是求:∏(n!) ,盲目地存下来是不行的,这时候看见条件: 数据组数 #include #include #include #include #include #define Mod 10000000...
阅读全文
摘要:题意: n种食物,每种含花椒的概率为Pi,现在已经选择了[L,R]这个区间(下标)的食物,要再选一个,使总的食物只有一种含花椒的概率最大,问选哪个最好,相同的选下标小的。解法: 就不写解法了。此处有官方题解:http://acm.uestc.edu.cn/bbs/read.php?tid=5835维...
阅读全文
摘要:题意: 一个游戏有n轮,有A和B比赛,谁在第 i 轮得胜,就获得 i 分,给出x,y,问A得x分,B得y分有没有可能,如果有,输出A最少赢的盘数。解法: 这题是我傻逼了,处理上各种不优越,要使n*(n+1)/2 >= 10^12, n为10^6是不够的,要开大一点,总是细节地方不注意。做法很简单,先...
阅读全文
摘要:题意: 给n个点,问最多有多少个相似三角形(三个角对应相等)。解法: O(n^3)枚举点,形成三角形,然后记录三个角,最后按三个角度依次排个序,算一下最多有多少个连续相等的三元组就可以了。注意:在同一个坐标的两点只算一次,所以要判一下。代码:#include #include #include #i...
阅读全文
摘要:题意: n个物体从高H处以相同角度抛下,有各自的初速度,下面[L1,R1]是敌方坦克的范围,[L2,R2]是友方坦克,问从某个角度抛出,在没有一个炮弹碰到友方坦克的情况下,最多的碰到敌方坦克的炮弹数。解法: 枚举角度,将pi/2分成1000份,然后枚举,通过方程 v*sin(theta)*t - 1...
阅读全文
摘要:题意: 给一个点,一个圆,一个矩形, 求一条折线,从点出发,到圆,再到矩形的最短距离。解法: 因为答案要求输出两位小数即可,精确度要求不是很高,于是可以试着爆一发,暴力角度得到圆上的点,然后求个距离,求点到矩形的距离就是求点到四边的距离然后求个最小值,然后总的取个最小值即可。代码:#include ...
阅读全文
摘要:题意:问方程X^Z + Y^Z + XYZ = K (X1)有多少个正整数解 (K#include #include #include #include #include #define lll __int64using namespace std;#define N 200007lll k;int...
阅读全文
摘要:题意: 给出矩阵M,求M*M矩阵的r行c列的数,每个查询跟前一个查询的结果有关。解法: 观察该矩阵得知,令ans = M*M,则 ans[x][y] = (n-1-x行的每个值)*(n-1+y列的每个值)。直接对每个查询做n次累加(n*m=10^8的复杂度)竟然可以水过。官方题解给的是n^2的算法,...
阅读全文
摘要:题意:给出一个字符串,有两种操作: 1.插入一个数字 2.交换两个字符 问最少多少步可以把该字符串变为一个后缀表达式(操作符只有*)。解法:仔细观察,发现如果数字够的话根本不用插入,数字够的最低标准为'*'的个数+1,因为最优是 '12*3*..' 这种形式,所以先判断够不够,不够就补,然后从左往...
阅读全文
摘要:题解见官方题解,我这里只实现一下,其实官方题解好像有一点问题诶,比如while( str[startPos] != str[i+1] ) cnt[str[startPos]]--, startPos++;那个str[i+1]的话会越界。应该是这样:while(str[startPos] != str...
阅读全文
摘要:题意:给出一个两边长为a,b的矩形,要求增加a和增加b使a*b>=6*n且a*b最小。解法:设新的a,b为a1,b1,且设a#include #include #include #define lll __int64using namespace std;int main(){ lll n,a...
阅读全文
摘要:题意:给你一些区间,再查询一些点,问这些点与所有区间形成的最小距离的最大值。最小距离定义为:如果点在区间内,那么最小距离为0,否则为min(pos-L[i],R[i]-pos)。解法:当然要排个序,仔细想想会发现我们要找的区间的位置满足二分性质,即如果此时pos-L[mid] >= R[mid]-p...
阅读全文


浙公网安备 33010602011771号