10 2014 档案
摘要:题意: 给一些平面上的点,然后给一些查询(x,y),即以(x,y)为原点建立坐标系,一个人拿走第I,III象限的点,另一个人拿II,IV象限的,点不会在任何一个查询的坐标轴上,问每次两人的点数差为多少。解法:离线树状数组。点不在坐标轴上,即点不共线使这题简单了不少,可以离散化点,也可以不离散化,因为...
阅读全文
摘要:题意: 有点迷。有一些点,Stan先选择某个点,经过这个点画一条竖线,Ollie选择一个经过这条直接的点画一条横线。Stan选这两条直线分成的左下和右上部分的点,Ollie选左上和右下部分的点。Stan画一条竖线之后,Ollie有很多种选择,在所有选择中,Stan能获得 “分数最小值的最大值” ,而...
阅读全文
摘要:题意:牛的听力为v,两头牛i,j之间交流,需要max(v[i],v[j])*dist(i,j)的音量。求所有两两头牛交谈时音量总和∑(max(v[i],v[j])*abs(x[j]-x[i])) ,x[i]表示i的坐标解法:将牛按听力从小到大排序,这样就可以使每次算一头牛与别的牛的值时听力永远取自己...
阅读全文
摘要:题意: 有n*m个格子(n,m #include #include #include #include #include #include #include using namespace std;#define N 100007int nowR[N],R[N],b[N];map mp,CntC,n...
阅读全文
摘要:题意:给一个数字序列,第一类操作是将[l,r]内的数全赋为x ,第二类操作是将[l,r]中大于x的数赋为该数与x的gcd,若干操作后输出整个序列。解法: 本题线段树要维护的最重要的东西就是一个区间内所有数是否相等的标记。只维护这个东西都可以做出来。 我当时想歪了,想到维护Max[rt]表示该段的最大...
阅读全文
摘要:题意: 给一个数的序列,询问一些区间,问区间内与区间其他所有的数都互质的数有多少个。解法: 直接搞有点难, 所谓正难则反,我们求区间内与其他随便某个数不互质的数有多少个,然后区间长度减去它就是答案了。那么怎么求区间内与区间其他某个数不互质的数的个数(记为cnt)呢? 我们用L[i],R[i]表示在整...
阅读全文
摘要:题意: 将一些分散在各行的HTML代码整理成标签树的形式。解法: 模拟,具体见代码的讲解。 开始没考虑 '\t' 。。代码:#include #include #include #include #include #include #include using namespace std;strin...
阅读全文
摘要:题意: 构造一个序列,满足m个形如:[l,r,c] 的条件。 [l,r,c]表示[l,r]中的元素按位与(&)的和为c。解法: 线段树维护,sum[rt]表示要满足到现在为止的条件时该子树的按位与和至少为多少。更新时,如果val的pos位为1,那么整个区间的按位与和pos位也应该为1,否则与出来就不...
阅读全文
摘要:题意: 给出矩阵M,求M*M矩阵的r行c列的数,每个查询跟前一个查询的结果有关。解法: 观察该矩阵得知,令ans = M*M,则 ans[x][y] = (n-1-x行的每个值)*(n-1+y列的每个值)。直接对每个查询做n次累加(n*m=10^8的复杂度)竟然可以水过。官方题解给的是n^2的算法,...
阅读全文
摘要:题意:给出汇编指令,解释出编码或者给出编码,解释出汇编指令。解法:简单模拟,按照给出的规则一步一步来就好了,主要是注意“SET”的情况,还有要输出的东西最好放到最后一起输出,中间如果一旦不对就可以及时跳出去。其他也没什么了,只要细心点,多测几组样例就好了。代码:#include #include #...
阅读全文
摘要:题意: 给一个矩阵,每次查询一个子矩阵内的最大最小值,然后更新子矩阵中心点为(Max+Min)/2.解法: 由于是矩阵,且要求区间最大最小和更新单点,很容易想到二维的线段树,可是因为之前没写过二维的线段树,所以没跳出来。后来熟悉了一下,原来很多细节地方都没有考虑到。这里build,update,qu...
阅读全文
摘要:题意:给定n个楼层,初始在a层,b层不可停留,每次选一个楼层x,当|x-now| b时, 那么dp[i][j] += dp[i-1][(j与b的中点(以下))~n]由于dp[i][j]的值只跟dp[i-1][]的一些值有关,所以用滚动数组会大大减小内存。用一个sum[i][j]维护前缀和即可。代码:...
阅读全文
摘要:题意:给出一个字符串,有两种操作: 1.插入一个数字 2.交换两个字符 问最少多少步可以把该字符串变为一个后缀表达式(操作符只有*)。解法:仔细观察,发现如果数字够的话根本不用插入,数字够的最低标准为'*'的个数+1,因为最优是 '12*3*..' 这种形式,所以先判断够不够,不够就补,然后从左往...
阅读全文
摘要:题意:给一棵树,要求找出两个点,使得所有点到这两个点中距离与自己较近的一个点的距离的最大值(所有点的结果取最大的值,即最远距离)最小。 意思应该都能明白。解法:考虑将这棵树摆直如下:那么我们可以把最中间的那条直径边删掉,然后在分成的两颗子树内求一个直径中心点,那么这两个点就可以作为答案。 反正当时就...
阅读全文
摘要:题意: 树上路径之间的点统一加减k,查询某点的值解法:不会LCA的解法,于是用树链剖分了,比较简单的剖分,然后用线段树维护就行了,相当于区间更新,单点查询,查询点 i 的值时,只需在线段树中查询pos[u]位置的值即可。加IO优化900+ms代码:#include #include #include...
阅读全文
摘要:题意:给一棵树,两种操作: ADD1: 给u-v路径上所有点加上值k, ADD2:给u-v路径上所有边加上k,初始值都为0,问最后每个点和每条边的值,输出。解法:树链剖分可做,剖出来如果直接用线段树来区间更新的话会TLE,所以要换一种姿势,有一种树链剖分的经典姿势就是看做树状数组一样,每次加值的时候...
阅读全文
摘要:题意:给一棵树,每次更新某条边或者查询u->v路径上的边权最大值。解法:做过上一题,这题就没太大问题了,以终点的标号作为边的标号,因为dfs只能给点分配位置,而一棵树每条树边的终点只有一个。询问的时候,在从u找到v的过程中顺便查询到此为止的最大值即可。代码:#include #include #in...
阅读全文


浙公网安备 33010602011771号