-
题目链接 题意: 给出若干个点,在给出一个定点,求距离该定点最近的m个点。 思路: 我们已经知道kd-tree可以得到最近邻,实际上M近邻,只需要维护一个size为M的优先队列就可以了。 需要注意,优先队列的元素一定要先定义小于关系orz 以及这次采用了轮盘转的策略划分维度,也就是按照深度,所有维度轮流作为split-method(实际用起来效果还是挺棒的orz /* *********************************************** Author :111qqz Created Time :2017年10月08日 星期日 23时18分42秒 File Name :4347.cpp …
Read More -
题目链接 题意: 有若干个(2E5)旅馆,分别给出旅馆的坐标和价格。有m个查询,每个查询给出一个人的位置(x0,y0),以及其能接受的最高价格。问在该人能接受的价格内,距离其最近的旅馆的坐标和价格是多少。 思路: kd-tree学习笔记 加了价格的限制其实无所谓,只要在更新的时候,先判一下价格就行了。 训练的时候不会kd-tree。。感觉有点可惜了。不然就6题了orz /* *********************************************** Author :111qqz Created Time :2017年10月08日 星期日 18时43分38秒 File Name :5992.cpp …
Read More -
题目链接:hdu2966 题意: 给出二维平面上n(1E5)个点,问对于每个点,其他距离其最近的点的距离是多少。 思路: kd-tree 裸题。 kd-tree 学习笔记 /* *********************************************** Author :111qqz Created Time :2017年10月08日 星期日 18时43分38秒 File Name :2996.cpp ************************************************ */ #include <cstdio> #include <cstring> …
Read More -
老规矩,资料先行。 好久没学新算法了,有点忘记怎么学了orz K-D tree 数据结构 hdu 2966 In case of failure (k-d树 最近邻近点) 首先来看算法的提出。 现在二维平面上有n个点,知道这n个点的坐标,然后再添加一个点,问n个点中,距离新添加的点距离最近的点。 如果不做任何预处理,那么就是暴力枚举每个点,与该定点的距离。 如何优化呢? 我们可以考虑把点域均等划分成若干个方块。 这样每次询问的时候只需要查询定点所在方格,以及定点相邻的8个方格中的点与该定点的距离即可。(除非这九个方格中没有点) 这种划分方法,对于随机数据大概是美滋滋,但是数据不会那么随机,因此划分也不能均等划 分。 这个时候, …
Read More -
2016 NEERC Northern Subregional Contest A Anniversary Cake (水题)
Oct 3, 2017 · 1 min read题意: W_H的方格纸,共有(w+1)_(H+1)个整点,现在将2个蜡烛放在2个不同的整点上。蜡烛不会被放在边界上。现在给出方格纸的尺寸和2个蜡烛的坐标,求一条线段将方格纸拆成2部分,而且这条线段不经过任何一个蜡烛且使得每一部分恰好有一个蜡烛。问线段的起点和终点。 思路: 为了方便讨论,我们将x坐标小的设为蜡烛1,另一个设为蜡烛2. 分两种情况讨论,即横坐标相同和不同2种情况。 需要注意的是...要交文件orz /* *********************************************** Author :111qqz Created Time :2017年10月02日 星期一 12时34分38秒 File …
Read More -
题目链接 题意: 有一只熊,初始在(sx,sy)处,如果当前的位置在(x,y),那么下一秒会在((x+dx-1)%n+1,(y+dy-1)%n+1)处, dx[i] = k[i-1] + dx[i-1],dy[i]=k[i-1] + dy[i-1],k表示的是某个点的花丛数目。 初始点(x,y)的花丛数为x+y,每经过一个时间,所有点的花丛数增加1. 所以,k[i] = x[i] + y[i] + i-1,现在问经过时间t后,熊的位置在哪里。也就是x[t],y[t]的值。 思路: 我们不妨先只考虑x方向的,因为y方向完全相同。 观察x[t]的式子, x[t] = (x[t-1] + dx[t-1] -1) % n +1。。这个%n之 …
Read More -
题目链接 题意: 求f[n] = f[n-1] + f[n-2] + 1,在b(10000)进制下的最后一位数字的十进制表示。 思路: 构造矩阵即可,M矩阵是一个3_3的矩阵,M1矩阵是一个3_1的矩阵。。很easy,就不说了。 写题解的目的是,对于这种要求b进制下,最后一位或者最后两位的数字的十进制表示的问题,其实就是在说,取模的数是base或者base^2 1A美滋滋 /* *********************************************** Author :111qqz Created Time :2017年10月01日 星期日 18时39分17秒 File Name :10518.cpp …
Read More -
hdu4686题目链接 题意: An Arc of Dream is a curve defined by following function: where a 0 = A0 a i = a i-1_AX+AY b 0 = B0 b i = b i-1_BX+BY What is the value of AoD(N) modulo 1,000,000,007? 思路: 看n的1E18的范围也知道是矩阵快速幂。。 难点还是构造矩阵。 构造矩阵主要凭借经验,但是还是有一些规律可循: 1. 对于求和的式子,如 s[n] = sum{F[1]..F[n]}类似的式子,我们只需要考虑如何构造F[n]即可。 2. 尽量将要构造的表达式展 …
Read More -
uva10870题目链接 题意: f(n) = a1f(n − 1) + a2f(n − 2) + a3f(n − 3) + . . . + adf(n − d), for n > d 给出f[1]..f[d],a[1]..a[d],问 f[n]%m是多少。 思路: 构造矩阵,加速递推式。 趁着这道题说一下一般的构造法。 转移矩阵M(d*d)的构造方法是,最后一行倒序写a[1]..a[d], 除去第一列和最后一行外,用1填充对角线,其余的为0. 初始矩阵M1(d*1)的构造方法是从上到下,f[1]..f[d]即可。 需要注意的是 *最后答案是 (M^(n-d))M1.mat[d-1][0] (由于经常出现的是d=2的递推式,因 …
Read More -
uva10655题目链接 题意: 给出a+b和ab的值,问a^n+b^n 思路: 构造矩阵,手写一下很显然... 转移矩阵M=[0 , 1] [-q,p ] 初始矩阵M1=[p ] [p^2-2*q] 快速幂即可。 有个坑点在于..读入的结束是p=0&q=0,并且只有这两个输入。 如果用p=0&&q=0作为终止条件,那么就会将三个输入,但p==0&&q==0的情况错误得终止... 正确的做法是 while (~scanf("%lld%lld%lld",&p,&q,&n)==3) /* …
Read More