Bzoj 2190
由题意可知,能看见的人是对角线对称的
斜率相同的直线中只有一条能被看见,也就是说$\frac{y_1}{x_1}=\frac{y_2}{x_2}$的直线只有一条能被看见。
如果$gcd(x, y)=d≠1$的话,$\frac{y}{x}$可约分,就肯定被前面的点$(\frac{x}{d},\frac{y}{d})$挡住盖了,所以$gcd(x, y)=1$的点才能被看见。我们这里用欧拉函数求。因为欧拉函数$\varphi(x)$就是小于$x$与$x$互质的数,那这里求出$2\sum_{i=1}^{n-1}\varphi(i)+1$即为答案
Bzoj 3211(线段树/树状数组+并查集)
BZOJ 3211
2017.8.19:
本题就是线段树模板题,但是sqrt慢,并且点也只能一个个sqrt,不能一起sqrt,维护一个lazy标记区间是否全是1或0,然后写就行了(并不知道之前写的并查集是什么东西。。)
「Bzoj 1054」「HAOI2008」移动玩具 (BFS+状压判重)
Bzoj 1054
每个状态当做一个点,然后BFS
每次BFS在状态里找1然后遍历即可,判重就存一个16位的二进制就行了,而不需要哈希
二维数组转16位的二进制,16位的二进制转二维数组的方法具体实现看代码。
「Bzoj 1088」「SCOI2005」扫雷Mine (模拟)
Bzoj 1088
bzoj上的图被吃掉了。。搞的我题意弄错
这题答案只可能在$[0,2]$,因为不然第一行无法满足条件。
观察发现,因为第二列的数值是第一列的三个值相加,所以先确定了第一行的前两格,后面就可以减一下推了,然后判断一下
Bzoj 2761(STL)
BZOJ 2761
先按照数值排序,然后unique去重,然后再按编号排序,输出即可。
本题练习STL不错,本题set也能做。
注意:sort的cmp必须加const,unique返回值要记得减
「Bzoj 1085」「SCOI2005」骑士精神 (IDA*)
Bzoj 1085
这种限制步数的题目可以用迭代加深搜索做。并且这种只有一个空格的题目,一般就是用空格的坐标去遍历其他有东西的坐标,然后相当于东西的移动。
本题直接DFS超时严重,样例都过不了。
我们考虑加一个估价函数剪枝:当前步数$+$当前状态和目标状态棋盘上的差异数(具体看代码)$<$迭代加深的步数
之后就很快了
「Bzoj 3175」「网络流 24 题」骑士共存问题(二分图最大独立集)
bzoj 3175
网络流24题 骑士共存问题
本来认为连边只连下面然后就是是DAG上的最小路径覆盖。。但是这样做有BUG。。想想也知道Bzoj 2150都保证不能返回才构成DAG,否则也不行
但是这其实是求二分图最大独立集,8个方向连边,然后答案就是 总结点数 $-$ (最大匹配$/2$)
注意到这题$n=200, n^2=40000$,$40000^2$很容易TLE,如果用匈牙利时间复杂度很悬,vector存正向边会TLE,只能反向。。注意G[u].size()是unsigned int,先用int类型的siz存下来,再循环,否则等于0的时候减一就溢出了
「Bzoj 3170」「Tjoi2013」松鼠聚会(切比雪夫距离转曼哈顿距离)
bzoj 3170
题意:有$N$个小松鼠,它们的家用一个点$x,y$表示,两个点的距离定义为:点$(x,y)$和它周围的$8$个点即上下左右四个点和对角的四个点,距离为$1$。现在$N$个松鼠要走到一个松鼠家去,求走过的最短距离。
只走八个方向的距离为切比雪夫距离。
切比雪夫距离转曼哈顿距离:将原来的$(x,y)$转化为$(x+y,x-y)$
曼哈顿距离转切比雪夫距离:将原来的$(x,y)$转化为$(\frac{x+y}{2},\frac{x-y}{2})$
可用曼哈顿的展开式证明
所以这题转化以后,就变为了求一个点到其他点的曼哈顿距离和最小是多少。
考虑枚举这个点,然后分别对于$x,y$拆绝对值式子算值,然后取$\min$即可。这里要先将坐标转化为$(x+y,x-y)$,然后最后答案除以二即可。
「Bzoj 1059」「ZJOI2007」矩阵游戏 (二分图最大匹配)
Bzoj 1059
想算法的时候自己多搞几个数据找一找规律和结论,特别是这种看起来就会有规律和结论的题目,很重要!
通过搞几个数据,发现:在同行同列的两个$1$,它们对答案的贡献是相同的,因为无论怎么调换,这两个$1$都会在同行同列。又因为要对角线上都是$1$,所以问题转化为:找到$n$个点使得这$n$个点不在同行同列上。这样我们把$x$坐标弄到左边,$y$坐标弄到右边,如果$(i,j)=1$,在左边$i$连一条边到右边$j$,然后做一个二分图最大匹配,如果不能全部都匹配,就不能完成了