poj
Neo__Z
这个作者很懒,什么都没留下…
展开
-
POJ 3690 Constellations 哈希表 矩阵匹配
题目大意给出一个n * m的矩阵,矩阵中只有一些*或者0 n <= 1000, m <= 1000 然后有t (t <= 100)个询问,每次询问给出一个p * q的矩阵 p,q是提前固定的数值。 问这些询问中能是大矩阵的子矩阵的有几个Sample Input3 3 2 2 2 *00 0** *00** 00*0 ** 3 3 2 2 2 *00 0** *00** 0原创 2017-08-26 15:04:48 · 353 阅读 · 0 评论 -
poj1286 Necklace of Beads【polya定理】
题目大意:用红蓝绿三色共n个珠子串成项链,求旋转和翻转后仍不一样的串法种数?解题思路:首先说一下polya定理:设G是n个对象的一个置换群设G是n个对象的一个置换群{p1,p2……,pkp_1,p_2……,p_k}(即所有的变换方式),用m种颜色对这n个对象染色,则不同的方案数为(即所有的变换方式),用m种颜色对这n个对象染色,则不同的方案数为l=1|G|(mc(p1)+mc(p2)+……+mc(p原创 2017-12-15 08:25:57 · 368 阅读 · 0 评论 -
poj2420 A Star not a Tree?【模拟退火】
题目大意:给定n个点,求一点到所有点距离的最小值。解题思路:模拟退火真是神, 就是先设置一个起始点较大的步长step(初始温度),每次随机向一个方向走step,若该点更优,则更新答案,并转移起始点位置。操作完后减小等比例减小step重复上述操作若干次(尽量多),则可得到近似最优解。#include<cstdio>#include<algorithm>#include<cmath>using原创 2017-12-25 20:08:52 · 339 阅读 · 0 评论 -
poj2411 Mondriaan's Dream【插头dp】
题目大意:用1∗21*2的矩形铺满n∗mn*m的大矩形,问有多少种方案。1≤n,m≤111\le n,m\le 11解题思路:这道题所说可以用状压dp来做,但用轮廓线dp可以做到更优秀的复杂度。首先这道题只用考虑每段轮廓线上有无插头即可,按格转移,所以时间复杂度为O(n22n+1)O(n^22^{n+1})每个有以下四种情况: 分类讨论即可。轮廓线dp建议用滚动数组,这样换行的时候好转移。#i原创 2017-12-17 13:58:40 · 338 阅读 · 0 评论 -
poj1741 Tree【点分治模板】
突然发现自己没写点分治的板子,所以来填填坑。题目大意:给定一棵边带权树,为树中距离不超过k" role="presentation" style="position: relative;">kkk的点对数目。解题思路:先点分,考虑所有经过u的链。 求出当前子树中所有点与u的距离。 排序后O(n)" role="presentation" style="position: rel原创 2018-01-28 08:40:08 · 210 阅读 · 0 评论 -
poj1743 Musical Theme【后缀数组+二分答案】
题目大意:给n个数组成的串,求是否有多个“相似”且间隔至少为1的子串的长度大于等于5,两个子串相似当且仅当长度相等且每一位的数字差都相等。解题思路:首先把问题转化成重复子串的问题:把原串每一位都与前一位相减。这样得出的新串如果有两个长度为n的子串相同,那么它们对应在原串的长度n+1的子串也就相似。再求出后缀数组。如果只是求可重叠重复最长子串,答案就是height的最大值。但原创 2018-01-28 10:26:18 · 244 阅读 · 0 评论 -
poj3261 Milk Patterns【二分答案+后缀数组】
题目大意:给定一个长度为n的数字串,问可重叠至少出现k次的最长重复子串的长度。解题思路:做法有很多,比如二分+哈希+map(或哈希表)就比较清新,这里说说后缀数组的做法。 建立后缀数组,二分ans后只需看height是否有连续k-1个大于ans即可。#include#include#includeusing namespace std;int getint(){原创 2018-01-28 10:54:33 · 224 阅读 · 0 评论 -
poj1474 Video Surveillance【半平面交】
解题思路:求多边形的内核,半平面交模板。 维护时不仅要看队尾直线是否合法,还要看队首的直线是否合法。#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>...原创 2018-01-13 18:02:43 · 262 阅读 · 0 评论 -
poj1704 Georgia and Bob【阶梯Nim】
解题思路:有一些在格子上的石子,每个格子只能容纳一个石子。每次可以将一个石子向左移动若干格,但不能跨越左边的石子。不能操作的人失败。解题思路:阶梯Nim模型。 把相邻两个石子的间距看成一个阶梯上的石子个数,向左移动石子就等价于把阶梯上的石子向右边的阶梯移动。 这样化归为阶梯Nim。#include<cstdio>#include<algorithm&...原创 2018-04-08 16:12:52 · 169 阅读 · 0 评论 -
poj3845 Fractal 【坐标变换】
题目大意:给一条折线,每一次操作把这条折线的所有线段变换成跟这条折线的相同形状,重复d次。问此时从头到尾走全长的f(0≤f≤1),将停在哪个点上。解题思路:假设做了一次分形后得到折线长度是原来的kk倍,则深度为d的分形(操作了d-1次)的长度是原来的kd−1k^{d-1}倍。若当前线段增长后已经超出了所剩余的长度,就相当于确定变换后的直线在当前线段上,那么递归kd−2k^{d-2},确定下一次变换的原创 2017-12-22 08:45:55 · 291 阅读 · 0 评论 -
poj2932 Coneology【扫描线+set】
题目大意:平面上N个两两没有公共点的圆,i号圆的半径为ri,圆心在(xi,yi),求所有在最外层,即不被包含在其他圆内部的圆 。解题思路:注意所给的圆都没有公共点。维护一个set,里面保存着和扫描线相交的圆,再用扫描线从左往右扫。如果扫到某圆的最左点,当它不被其他圆包含时,就把它加入到set中。如果扫到是某圆的最右点,并且该圆在数据结构中,就把这个圆删掉。怎么检查它有没有被其他圆包含呢?set里的圆原创 2017-11-24 18:24:50 · 347 阅读 · 0 评论 -
POJ1091 跳蚤 【容斥】
题目链接:http://poj.org/problem?id=1091解题报告:设数字分别为a1,a2,a3……ma_1,a_2,a_3……m,那么若方程x1a1+x2a2+……xn+1m=1有解x_1a_1+x_2a_2+……x_{n+1}m=1有解,则这张卡片可行。而此方程有解的充要条件为gcd(a1,a2,a3……m)=1gcd(a_1,a_2,a_3……m)=1,所以本题即为求gcd(a1,原创 2017-08-28 16:40:43 · 283 阅读 · 0 评论 -
poj3744 Scout YYF I 【概率dp+矩阵优化】
解题思路:很容易想到设dp[i]表示安全走到i的概率,则dp[i]=p∗*dp[i-1]+(1-p)∗*dp[i-2],然后有地雷的地方概率为0,最后dp[maxpos+1]就是答案; 但数据范围是[1, 100000000],显然过不了。注意到地雷只有10个,所以可以把地图分为10段,每两个地雷之间的dp用矩阵优化就可以过了。#include<iostream>#include<cstdio>原创 2017-10-28 08:34:08 · 368 阅读 · 0 评论 -
poj1185 NOI2001 炮兵阵地【状压dp】
解题思路:注意到任意一行的布置只与该行及上两行的布置有关,且分析一个列为10(m的最大值)的表,发现一个全为P的空列上一共也只有60种合法的放置方法,所以可以从上往下进行扫描,用二进制枚举当前这一行的状态,用1024*1024的数组表示前两行的放置状态,在都合法的情况下进行转移到另一个表示当前行与上一行的数组即可(考虑滚动数组)。但由于第一行要特殊处理(i-2是负数会数组越界),所以可以改为从下往上原创 2017-10-21 14:25:50 · 237 阅读 · 0 评论 -
poj3243 Clever Y【BSGS模板】
解题思路:BSGS模板题。#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<ctime>#include<vector>#include<set>#define ll long longusing namespa原创 2017-12-01 16:47:10 · 241 阅读 · 0 评论 -
poj2891 Strange Way to Express Integers【解一元线性同余方程组模板】
题目大意:求解一元线性同余方程组: x≡b1(modx\equiv b_1(mod m1)m_1) x≡b2(modx\equiv b_2(mod m2)m_2) …… x≡bn(modx\equiv b_n(mod mn)m_n) 若无解输出-1,否则输出最小正整数解。解题思路:考虑只有两个方程: x≡b1(modx\equiv b_1(mod m1)m_1) x≡b2(modx\e原创 2017-12-01 14:26:55 · 232 阅读 · 0 评论 -
poj2653 Pick-up sticks
题目大意:按顺序放上一些线段,为最后未被其他线段覆盖的线段有哪些?解题思路:数据很水,n2n^2也能过,主要考察线段相交的判断。 倒着加入,看每条线段有没有与先加入的相交,没有则不被覆盖。 若两条线段相交,则其两端点分别在另一条线段两侧,用叉乘判断即可。#include<iostream>#include<cstdio>#include<cstring>#include<string>#原创 2017-11-23 07:54:49 · 210 阅读 · 0 评论 -
poj3348 Cows【凸包模板】
解题思路:求出凸包后用面积除以50即为答案。#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<ctime>#include<queue>#include<vector>#include<set>using nam原创 2017-11-24 11:01:35 · 196 阅读 · 0 评论 -
poj2068 Nim【博弈论】
题目大意:有2n个人,从0开始编号,按编号奇偶分为两队,循环轮流取一堆有m个石子的石堆,偶数队先手,每个人至少取1个,至多取w[i]个,取走最后一个石子的队伍输。问偶数队是否能赢。解题思路:设dp[i][j]表示轮到第i个人,还有j个石子的情况下他所属队伍是否能赢。 那么如果存在一个x,使第i个人取了x个石子后第(i+1)%2n个人无论如何都败,那么他就可以赢;若不存在则输。即是: dp[i][原创 2017-12-04 16:47:31 · 576 阅读 · 0 评论 -
bzoj5316: [Jsoi2018]绝地反击【计算几何+二分+扫描线+网络流】
传送门解题思路:先二分答案,那么每个点就有了一个匹配范围。 考虑轨道上匹配点的偏转角度,肯定是一个匹配点抵住一个点的匹配边界上,所以一共只有2n种匹配方式,每次暴力网络流是O(n4logn)O(n4logn)O(n^4logn)注意到偏转角度不会超过2π/n2π/n2\pi/n,即最多只会一项每个点一条匹配边的出现,另一条的消失,所以我们可以用扫描线的方法,将操作排序后处理增广和退流...原创 2018-05-15 07:55:44 · 1076 阅读 · 0 评论