
POJ
数论只会GCD
研二在读
展开
-
POJ 2342 Anniversary party树形dp
题目链接:POJ 2342题意:在一个公司里,每个成员都有各自的rating,要参加一次年会,规定 有直接上下级关系的任意两人不能同时参加,并且要使参加年会成员的rating值最大;题解:关于树形dp—树形dp总结而对于这题,对于么个成员都有去不去两种可能,用dp[i][0]表示他不去的最大rating值,dp[i][1]表示去的最大r原创 2016-08-18 17:32:54 · 370 阅读 · 0 评论 -
POJ 3708 高精度 + 置换 + 中国剩余定理
传送门:POJ 3708题解(1)设m, k的d进制表示分别为p1p2···pn1, k1k2···kn2 其中n1, n2是位数(2)由f(m)f(m)定义得: f(m)=ap1∗dn−1+∑i=2n(bpi∗dn−i),ap1ϵ[1,d),(bpiϵ[0,d),iϵ[2,n)]f(m) = a_{p_1} * d ^{n - 1} + \sum_{i=2}^n( {b_{p_i}}*d原创 2017-03-06 17:14:21 · 1042 阅读 · 0 评论 -
POJ 1961 KMP求循环节判断循环
对于一个串, 假定在i处形成循环, 那么 next[i]应该是上一个循环节尾,所以i % (i - next[i]) == 0且next[i] > 0当前i - next[i]是最小循环节的长度.代码:#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <set>#inclu原创 2017-03-28 21:26:22 · 625 阅读 · 0 评论 -
POJ 2406 KMP
求串的最小循环节, 根据循环条件: n 为串长那么 n - next[n]是n的约数code:#include #include #include using namespace std;const int N = 1000010;char T[N];int Next[N], len1;void getNext(){ len1 = strlen(T);原创 2017-03-29 18:36:26 · 418 阅读 · 0 评论 -
POJ 3461 KMP
题意求模式串在主串中出现的次数题解: 1. KMP匹配 2. 匹配完成后移位为串尾的next值code:#include <cstdio>#include <cstring>using namespace std;const int N = 1000010;const int M = 10010;char S[N], T[M];int Next[M], len1;void getN原创 2017-03-29 18:40:26 · 510 阅读 · 0 评论 -
POJ 2318 叉积 + 枚举
code:#include #include #include using namespace std;const int N = 5000 + 10;struct point{ int x, y; point(int _x = 0, int _y = 0):x(_x), y(_y){}; bool operator < (const point &rhs) const{原创 2017-04-10 21:22:43 · 332 阅读 · 0 评论 -
AC自动机入门-poj3461解法
前提 : 1. KMP 单模式匹配原理 2. 字典树结构失配函数获取: 1. 找当前点s的失配节点下标为c, 先找到找父节点f的失配节点fail[f], 如果fail[f]存在下标为c子节点, 那么fail[s] = ch[fail[f]][id] 不存在沿着失配指针回推fail[….fail[f]]直至根节点 2. 由于是树形, 所以一般采取bfs递推fail值, 而原创 2017-04-01 17:42:13 · 358 阅读 · 0 评论 -
POJ 2398
题解:2318+排序 #include #include #include using namespace std;const int N = 1000 + 10;int ans[N], mp[N];int n, m, x1, y1, x2, y2, up, down, x, y;struct line{ int u, l; bool opera原创 2017-04-11 11:16:40 · 422 阅读 · 0 评论 -
POJ 3304 直线与线段相交判断
code:#include <iostream>#include <cstring>#include <cmath>using namespace std;typedef double ld;const ld eps = 1e-8;const int N = 110;struct line{ ld p[2][2];}l[N];struct vec{ ld x, y;原创 2017-04-11 20:49:50 · 523 阅读 · 0 评论 -
POJ 1269
code:#include <cmath>#include <cstdio>#include <utility>using namespace std;typedef double ld;int n;struct Point{ int x, y; void read(){ scanf("%d%d", &x, &y); }}s1, e1, s2, e2原创 2017-04-13 13:32:34 · 434 阅读 · 0 评论 -
poj 1556 线段相交 + dijstra
code : #include <cstdio>#include <cmath>#include <vector>#include <cstring>using namespace std;typedef double ld;const ld eps = 1e-13;int n;ld dis[75][75], ans[75];ld x, d, md, mu, u;bool vis[7原创 2017-04-13 22:34:25 · 332 阅读 · 0 评论 -
poj 2417 baby_step giant_step 高次同余方程
题解链接 : 点击打开链接code : #include #include #include using namespace std;typedef long long ll;const int N = (1 << 16) + 10;struct R{ ll v, id; bool operator < (const R &rhs) const{ ret原创 2017-04-15 16:53:03 · 508 阅读 · 0 评论 -
POJ 3243 扩展BSGS
code:#include #include #include using namespace std;typedef long long ll;const int N = (1 << 16) + 10;ll p, b, n;ll FastPowMod(ll a, ll b, ll mod){ ll ret = 1 % mod; while(b){ if(b & 1原创 2017-04-17 19:51:01 · 500 阅读 · 0 评论 -
POJ 2653 线段相交
code : #include #include #include #include #include using namespace std;typedef double ld;const int N = 100010;const ld eps = 1e-8;int n;struct Point{ ld x, y; Point(ld _x =原创 2017-04-23 12:01:49 · 354 阅读 · 0 评论 -
POJ 1061 同余方程
传送门: POJ 1061题解 同余方程解法 注意取模时, 不能被整除的模数, 可能结果为负, 所以尽量使扩展欧几里得的a, b为正值AC code:#include<cstdio>#include<iostream>#include<algorithm>using namespace std;typedef long long LL;LL px, py, m, n, L, x,原创 2017-01-16 20:29:51 · 398 阅读 · 0 评论 -
POJ 1006 同余方程组 -- 扩展欧几里得求逆元
传送门:POJ 1006题意 给定体力,情感,智慧的一个出现日期(周期已知), 以及当前日期, 求最少再过多少天同时出现三个峰值题解 同余方程组, 设x 是要求的解, 令 y = x + d(当前日期),则 y ≡ p (mod 23), y ≡ i (mod 28), y ≡ e (mod 33); 用中国剩余定理求解, 转载一篇文章:中国剩余定理AC code原创 2017-01-16 18:41:55 · 558 阅读 · 0 评论 -
HDU POJ 1190 生日蛋糕 dfs + 剪枝
题目链接:poj 1190题解:这题刚开始想不到搜索的初始状态,没办法下手,迷迷糊糊的,后来就想着 按照给定n的初始入手,吧未放置的第0层看成一个圆,不是立体,高度也设为n + 1, 然后 从下往上找。。。。 想这个思路 花了太长时间 。。。。虽然是一发a但是感觉 自己对搜索的理解 太浅 能力还是要提高啊AC code:#i原创 2016-08-30 23:11:32 · 646 阅读 · 0 评论 -
POJ 2828 线段树单点更新
POJ 2828题解:这题最巧的是, 最后一个人的顺序是固定的, 反向更新运用线段树比较简单。比如, 最后一名选在第i个人后面, 那么他的位置就是i + 1, 以此类推倒数第二个.....这题是早前训练做的一道, 今天补上题解AC code://adruill's submission#include#原创 2016-09-17 16:12:47 · 444 阅读 · 0 评论 -
POJ 3468 线段树 区间更新+区间求和
POJ 3468经典区间更新题, 第一次完整敲完, 很不熟练, 要好好提升姿势水平。。AC code://lrl's submission#include#include#include#include#include#include#include#include#include#include#includeusing原创 2016-09-13 19:40:26 · 405 阅读 · 0 评论 -
poj 3264 RMQ问题 zkw线段树
题目链接:POJ 3264题意:RMQ问题题解:采用非递归线段树,orz神牛真是太强了,这种线段树好理解, 我成功1A,本蒻苣简直不敢相信....上代码://lrl's submission#include#include#include#include#include#include#include#include#inc原创 2016-09-09 15:00:53 · 403 阅读 · 0 评论 -
poj 3070 矩阵快速幂
POJ 3070题解: 矩阵快速幂。 转载一篇文章:关于快速幂和矩阵快速幂code:/*adrui's submission Language : C++Result : AcceptedLove : llfavorite : Dragon BallsStanding in the Hall of Fame*/#include#in原创 2016-10-02 14:40:43 · 480 阅读 · 0 评论 -
poj 3233 矩阵乘法(分块矩阵)
POJ 3233题解:Sn为所求矩阵, 则这样, 此题就变成了求矩阵幂和矩阵乘法, 分块矩阵乘法和普通矩阵一样的。code:/*adrui's submissionLanguage : C++Result : AcceptedLove : llFavorite : Dragon BallsStanding in the Ha原创 2016-10-03 15:36:15 · 1248 阅读 · 0 评论 -
POJ 2001 字典树
题意 给定一组字符串, 找出每个字符串的最短可识别的缩写前缀 如果到串尾也无法特定识别, 标志为整个串题解 字典树 + 构造时前缀串AC code:/** Author : adrui* Language : C++* Result : Accepted* Love : yy* Favorite : Dragon Balls* Standing in the Hall o原创 2016-11-12 20:51:16 · 331 阅读 · 0 评论 -
POJ 2299 树状数组求逆序对
题意 给定一组序列可转换相邻项的序列, 求让它排成非递减的最小操作数题解 就是求序列逆序对数, 但是序列最大数据较大, 数组开不出来, 所以需要现进行离散化 比如 9, 1, 0, 5, 4 ->0, 1, 4, 5, 9初始序列在排序后序列下标为5, 2, 1, 4, 3 就是把上限较大的元素集离散成500000数据量内的可执行的可求逆序对下表序列, 这样离散后元素最大为50原创 2016-11-18 15:42:17 · 465 阅读 · 0 评论 -
POJ 3468 Splay 解法
题解 Splay入门模板 将l - 1移到根, r + 1移到根下方, 那么[l, r]就在根的右子树的左子树上, 更新的时候也这样旋转, 更新lazycode:#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define debug 0#define M(a, b) memset(a原创 2016-12-03 00:31:19 · 484 阅读 · 0 评论 -
POJ 3481 Splay
传送门:POJ 3481题解 用二分查找建树, 然后把新节点放到root下, 这样能够保证查询复杂度平摊为O(logn); 查询后, 把查找的节点删掉(修改父亲和某个孩子指针, 数组模拟), 因为新建的时候旋转, 所以这里的节点不会又两个孩子 还有一种map解法Splay code:#include<iostream>#include<cstring>#include<cstd原创 2016-12-03 12:59:47 · 564 阅读 · 0 评论 -
POJ 2155 树状数组
传送门:POJ 2155题意 给定一个初始全为0的n * n矩阵, 可以分块修改各项值, 查询某点当前值 修改是0->1 || 1->0题解 二维区间染色, 每次更新染色区间, 更新各点染色 然后值是染色次数奇偶性 区间染色AC code:#include<iostream>#include<cstring>using namespace std;#define d原创 2016-11-25 11:50:14 · 380 阅读 · 0 评论 -
POJ 3667 线段树
传送门: poj 3667题解: 优先左边, 区间合并/* adrui's submission Language : C++ Result : Accepted Favorite : Dragon Balls Love : yy Motto : Choose & Quit Standing in the Hall of Fame*/#include<iostr原创 2016-11-27 21:53:29 · 386 阅读 · 0 评论 -
POJ 3744 概率 + 分段 + 数学推导 + 快速幂
传送门 :题解 这里把每两个mine之间分段, 每两个mine之间安全走过到末尾概率pi分别求出(快速幂), 越过的概率是pi*(1 - p)(一次走两步) 推导过程 AC code:#include<iostream>#include<cstring>#include<cmath>#include<iomanip>#include<cstdio>#include<alg原创 2017-01-09 18:01:28 · 537 阅读 · 0 评论 -
POJ 1066 线段相交
题意 给定n面墙, 这n面墙可能相交, 给出一个点, 可以在墙(相交后)的中点开门, 求它出矩形的最少门数分析对于一面最小的不可分割的墙, 某一点到它的某一端如果不和其它墙相交, 直接可以开门穿过, 如果有相交的墙l, 就要先穿过l, 一次向上推, 直至不存在相交的墙, 那么可以直接从中点穿过….所以对于某个给定线段某个端点最小门数就是和其他线段相交数 + 1矩形四个顶点也要考虑所以原创 2017-04-25 12:44:57 · 361 阅读 · 0 评论