
HDU
数论只会GCD
研二在读
展开
-
hdu 6001 容斥 + dfs
题解不如代码代码:#include <bits/stdc++.h>using namespace std;typedef vector<int> vi;typedef long long ll;const int max_m = 1 << 15;const int max_n = 100001;const ll mod = 1e9 + 7;int n, m;char s[20];l原创 2017-10-11 12:58:50 · 851 阅读 · 0 评论 -
HDU 1276 STL链表模拟
传送门 : HDU 1276AC code:#include<iostream>#include<list>#include<vector>using namespace std;int main() { int t; cin >> t; int n; while (t--) { cin >> n; list<int> l;原创 2016-12-26 19:12:23 · 722 阅读 · 0 评论 -
HDU 5997 & bestcoder #90 C 线段树
传送门 : HDU 5997题解 最初想过用vector存储, 但是没敢写…. 区间合并 + 成段更新 这题和普通线段树区间更新的区别就是待更新的区间不确定, 所以只要把要更新区间表示出来, 就行了 x -> y找到x代表的vector存储的多个成段区间, 一个个更新, 这些段加到y的段里, 然后清楚x的段 今天水过结果920MS,目前垫底。。。。打不动AC Co原创 2016-12-18 15:55:23 · 646 阅读 · 0 评论 -
HDU 1710 二叉树水题
传送门 : HDU 1710题解 水递归, 记得以前刚学数据结构的时候还用结构体模拟字符串做 用字符串是通过string的find函数, 这里读取的时候可以直接记录先序遍历的元素在中序中的位置 输出左右子树, 然后输出根AC code: (78MS, 略慢)#include<cstdio>#include<cstring>#include<algorithm>using na原创 2016-12-13 21:48:28 · 594 阅读 · 0 评论 -
HDU 1559 二维树状数组
传送门:HDU 1559模板题, 注意矩阵sum树状数组求和AC code:/*adrui's submission *Language : C++ *Result : Accepted *File Name: HDU 3333 *Favorite : Dragon Balls *love : yy *Standing in the Hall of Fame */#include<io原创 2016-11-23 14:56:12 · 501 阅读 · 1 评论 -
HDU 3333 树状数组(线段树) + 离散化 + 离线处理
传送门:HDU 3333题意 给定一个长为n的序列, 做m次查询, 查询结果为区间内只出现一次的数字集合之和题解 刚开始想的读入时用map映射,如果前面出现过, 线段树之前出现位置结点为0当前点原值, 没出现的话直接原值, 但是发现这样只能查询右端为当前位置左端为1的结点, 所以要先对查询做处理 查询预处理是对查询做r递增排序, 同时要有个idx对应查询下标 所以为了实现全部原创 2016-11-22 13:34:19 · 568 阅读 · 0 评论 -
HDU 1556树状数组
传送门: HDU 1556题解 树状数组模板题 区间染色 + 统计次数 向上查询, 向下统计 先把a之后的区间加一次染色更新, 再把b之后减一次染色更新, 这样[a, b]데染色更新就完成了AC code:#include<iostream>#include<algorithm>#include<cstring>using namespace std;#define l原创 2016-11-19 00:05:21 · 579 阅读 · 0 评论 -
HDU 1541 树状数组
传送门:HDU 1541题意 给定一组点,用坐标表示,求各个层次的点的数量, 每个点层次指的是其它点中x,y坐标均不大于当前点x,y坐标点的数量题解: 注意题目给出, 所有输入对于y来说都是不降序, 所以只要考虑x就可以了, y不增的时候x自增, 所以后输入的点不会影响先输入点的层次 因为计算层次的时候要排除自身, 所以要先更新当前点的层次再更新树状数组AC code:#inc原创 2016-11-18 19:53:43 · 388 阅读 · 0 评论 -
HDU 3791
传送门:HDU 3791题解 对串所构造的二叉树查询, 如果形状不对输出NO 查找到无法匹配的空结点或者当前节点不匹配但未被访问时, 形状不对 注意这里节点关键字是0~9, 所以构造函数里不能是0AC code:/** Author : adrui* Language : C++* Result : Accepted* Love : yy* Favorite : Drag原创 2016-11-14 23:05:21 · 452 阅读 · 0 评论 -
HDU 1166 树状数组
题解: 关于树状数组:树状数组AC code://lrl's submission#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cctype>#include<vector>#include<map>#include<cmath>#include<queue>#inc原创 2016-11-17 18:39:44 · 408 阅读 · 0 评论 -
HDU 4548 素数打表 + 线段树
传送门:HDU 4548题解 因为数据量和查询次数较大, 所以要用线段树求解 同时要注意美素数打表, 方法是对每个素数判断是否为美素数, 因为一个数字必定大于等于其各位数字之和,找到素数后它的各位数字之和是否为素数是已知的, 所以判断时比较容易实现美素数打表(下附素数打表模板)建树查询//打出1 ~ n 之间的素数用数组p[]保存;(n >= 2)void get_prime(原创 2016-11-02 16:11:12 · 520 阅读 · 0 评论 -
HDU 4630 离线处理 + 树状数组
传送门 :HDU 4630题意 给定一个大小为n的排列和m个查询, 输出每个查询区间内最大gcd 最大gcd :区间内任取两个数使其gcd最大的gcd题解 最初想的是用一个vector存储查询区间的因子信息, 维护出现>=2的因子, T就暂时没想 对于一个区间[l, r]区间内a[l], a[l + 1]…a[r]都用各自的因子, 对于出现过两次以上的因子便是该区间的最大公约数原创 2016-12-28 16:12:57 · 728 阅读 · 0 评论 -
HDU 4288 线段树 + 离线处理
传送门 :HDU 4288题解 先上代码, 候补AC code:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;#define mid ((l + r) >> 1)#define ls rt << 1, l, mid#原创 2016-12-30 15:15:39 · 965 阅读 · 0 评论 -
HDU 4002 数论
题解:设n=∏ni=1paiin = \prod_{i=1}^np_i^{a_i} 则ϕ(n)=∏ni=1paii(1−1pi)\phi(n)=\prod_{i=1}^np_i^{a_i}(1-\frac{1}{p_i})nϕ(n)=∏ni=11+1pi−1\frac{n}{\phi(n)}=\prod_{i=1}^n1 + \frac{1}{p_i-1}因为对于两个不同质数a,b(a < b)原创 2017-09-20 23:15:04 · 534 阅读 · 0 评论 -
HDU 6051原根 + 欧拉函数
题解: 主要是原根的幂表示[1, p - 1], 然后转换 hint里的公式: 找了一篇证明:http://blog.youkuaiyun.com/Clove_unique/article/details/53152473代码:#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef l原创 2017-08-02 15:55:40 · 801 阅读 · 0 评论 -
hdu 2222 AC自动机
传送门 : HDU 2222注意有相同模式串出现的可能, 且每个串最多记一次答案code:#include <iostream>#include <cstdio>#include <cstring>#include <string>using namespace std;#define clr(a) memset(a, 0, sizeof a)const int N = 10010 * 5原创 2017-05-05 19:47:59 · 387 阅读 · 0 评论 -
HDU 3306 矩阵快速幂
题解: S(n) = S(n - 1) + A(n)^2 = S(n-1) + x^2*A(n-1)^2 + 2*x*y*A(n-1)A(n-2) +y^2*A(n-2)^2构造矩阵code : #include #include #include using namespace std;const int p = 10007;int n, x, y;st原创 2017-04-22 16:16:16 · 602 阅读 · 0 评论 -
HDU 2896 AC自动机
AC自动机模板code:#include #include #include #include #include using namespace std;const int N = 60010;int ans = 0;char w[205], s[10010];struct AC_Auto{ int ch[N][128], f[N], val[N], sz; vect原创 2017-04-02 14:10:12 · 489 阅读 · 0 评论 -
HDU 5667 矩阵快速幂 + 费马小定理 + 快速幂
题解看完题目第一反应, 矩阵快速幂, 但是乘法无法构造递推想到幂的乘法可以转成指数的加法设f[n] = ap[n],则n > 2时 f[n] = abf[n-1]c f[n-2]=> p[n] = b + p[n - 1] * c + p[n - 2]就可以构造矩阵了且p[1] = 0, p[2] = b构造矩阵 ⎡⎣⎢p[2]00p[1]00b00⎤⎦⎥∗⎡⎣⎢c11100001⎤⎦原创 2017-03-15 22:35:34 · 515 阅读 · 0 评论 -
HDU 4686 矩阵快速幂
题解拿到手, 想到是递推转矩阵快速幂, 但是我想的复杂了 刚开始想的是用a[n] * b[n]的递推构造矩阵+ 分块 + 快速幂, 不过这时候开的矩阵是10 * 10一组最大多O(size^3) * log n size为矩阵阶数然后考虑Sn简化5 * 5, 细节处理A, 还是太弱了啊, 矩阵练了这么多。。code#include <iostream>#include <cstring>原创 2017-03-30 13:44:18 · 613 阅读 · 0 评论 -
HDU 1724 辛普森积分公式
code:#include #include #include using namespace std;typedef double ld;const ld eps = 1e-10;ld a, b, l, r;ld getf(ld x){return b / a * sqrt(a * a - x * x);}ld cal(ld l, ld r){ ld mid原创 2017-04-08 17:53:05 · 661 阅读 · 0 评论 -
HDU 1711 KMP 模板
KMP 入门题, 单模式串匹配#include <iostream>#include <cstring>using namespace std;const int N = 1000010;const int M = 10010;#define next Nextint s[N], t[M], next[M];int n, m;void getNext(){ next[0] =原创 2017-03-28 21:19:33 · 391 阅读 · 0 评论 -
HDU 3037 lucas + 费马小定理
传送门 : HDU 3037AC code:#include<cstdio>#include<iostream>using namespace std;typedef long long ll;ll n, m;ll p;ll f[100005];void InitFac() { f[0] = 1; for (int i = 1; i < p; ++i) f[i] = (f[i原创 2017-01-16 21:59:32 · 512 阅读 · 0 评论 -
HDU 1080 map or trie树
传送门:HDU 1800题意 根据题意可知:意思是有若干个飞行员,需要在扫帚上练习飞行,每个飞行员具有不同的等级,且等级高的飞行员可以当等级低的飞行员的老师,且每个飞行员至多有且只有一个老师和学生。具有老师和学生关系的飞行员可以在同一把扫帚上练习,并且这个性质具有传递性。即比如有A,B,C,D,E五个飞行员,且等级是A>B>C>D>E,那么可以使A当B的老师,B当C的老师,E当D的老师,那么A,原创 2016-11-09 16:02:27 · 421 阅读 · 0 评论 -
HDU 3999 BST + 先序遍历
传送门:HDU 3999题意 给出一组数, 按照bst树构建, 输出字典序最小得可构成相同bst树的序列二分查找树 转载BST题解 BST构建, 根据bst树的特性, 构造时只要先插入中间结点就可确定树的形状 ex: 构造树2, 3, 1按2, 1, 3次序输入是相同的结果 所以先构造然后树的先序遍历输出即可AC code:/*adrui's submissionL原创 2016-11-13 16:47:27 · 453 阅读 · 0 评论 -
HDU 3308 线段树区间合并 + 单点修改
传送门: HDU 3308题解: 维护最大连续和左右连续 区间合并查询/* adrui's submission Language : C++ Result : Accepted Favorite : Dragon Balls Love : yy Motto : Choose & Quit Standing in the Hall of Fame*/#in原创 2016-11-27 19:35:44 · 415 阅读 · 0 评论 -
HDU 1429 状压bfs 胜利大逃亡
题目链接:HDU 1429题解:这题 是状压dfs入门题,但是实在我知道是状压bfs之后了。。。这种最短路一般是dfs,第一眼看到有状态问题,就想着dfs,无果 然后联想到状压dp, 一点点找状态,最后 好不容易做出答案 提交 MLE...懵逼 开数组标记状态的时候 用的1 状压bfs,这题找到钥匙 ,要判断 遇到锁要看有没有钥匙step[i][原创 2016-09-01 18:17:38 · 564 阅读 · 0 评论 -
HDU 1166 单点更新 区间求和(ZKW 线段树)
题目链接:HDU 1166题解:没啥特殊的, zkw线段树直接在单点更新时向上更新就可AC code://lrl's submission#include#include#include#include#include#include#include#include#include#includeusing name原创 2016-09-11 10:02:46 · 515 阅读 · 0 评论 -
hdu 1698 区间更新
HDU 1698AC code://lrl's submission#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define debug 0#define LL l原创 2016-09-14 12:59:27 · 404 阅读 · 0 评论 -
HDU 1754 单点更新 区间求和 zkw线段树 + 递归线段树
HDOJ 1754线段树裸题,直接上代码。AC code:递归线段树://lrl's submission#include#include#includeusing namespace std;#define debug 0#define ls root << 1, l, mid#define rs root << 1 | 1,原创 2016-09-14 13:03:01 · 779 阅读 · 0 评论 -
HDU 2795 单点更新 + 区间最值
HDU 2795这题有点特殊, 要在查询的时候更新, 而且 因为是找最小的行数, 所以非左即右,优先考虑左(存在解情况下)AC code:#include #include #include #include #includeusing namespace std;#define debug 0#define inf 0x3f3f原创 2016-09-15 14:02:05 · 308 阅读 · 0 评论 -
HDU 1251 Trie入门
传送门:HDU 1251关于Trie树 Trie树入门详解题解基本Trie树构造和查询, 空间换时间注意这题读字符串只能用gets();或者gets_s();收获 Trie入门 this指针 终于把实验室搬家了, 新的机子挺好用AC code:/*adrui's submissionLanguage : C++Result : AcceptedLove :原创 2016-11-05 11:43:30 · 358 阅读 · 0 评论 -
HDU 1097 快速幂取模
传送门:HDU 1097题意 求a ^ b % 10题解 快速幂取模/*adrui's submissionLanguage : C++Result : AcceptedLove : llFavorite : Dragon BallsStanding in the Hall of Fame*/#include<cstdio>#include<cstring>using原创 2016-10-14 13:39:17 · 437 阅读 · 0 评论 -
HDU 2256 矩阵快速幂
传送门:HDU 2256题意 给定n, 求(2 ^ 1 / 2 + 3 ^ 1 / 2) ^ n的整数部分, 并对1024取模题解 推导公式 构造矩阵code/*adrui's submissionLanguage : C++Result : AcceptedLove : llFavorite : Dragon BallsStanding in the Hall原创 2016-10-13 22:35:28 · 513 阅读 · 0 评论 -
HDU 1757 矩阵快速幂
传送门: HDU 1757题解: 简单的矩阵构造 构造矩阵时注意数组不要溢出, 或者把数组开大构造 |0 1 0 ……… .0| * |f(0)| = | f(1) | |0 0 1 ………. 0| * |f(1)| = | f(2) | |…………………1| * |……| = |……..| |a9 a8 ………a0|原创 2016-10-11 21:21:54 · 420 阅读 · 0 评论 -
HDU 1042 N! 阶乘 高精度(java)
题目链接:HDOJ 1042\题意:求最大到10000的阶乘。题解:可想而知,n到10000时这个答案太大,所以必须要高精度;AC code:(java)//package adruill;import java.util.Scanner;public class Main { public static void main(St原创 2016-08-24 17:53:02 · 583 阅读 · 0 评论 -
HDOJ 1108 最小公倍数(java)
题目链接:HDOJ 1108AC code://package adruill;import java.util.Scanner;public class Main{ public static void main(String[] agrs){ Scanner in = new Scanner(System.in);原创 2016-08-24 18:35:51 · 595 阅读 · 0 评论 -
hdu 1575 矩阵幂对角线和
HDU 1575矩阵裸题, 直接上代码.code:/*adrui's submission Language : C++Result : AcceptedLove : llFavorite : Dragon BallsStanding in the Hall of Fame*/#include#include#include原创 2016-10-06 23:54:19 · 373 阅读 · 0 评论 -
HDU 1075 字典树
传送门:HDU 1075题意 单词翻译题解 trie树构造, 这题没有具体数据量所以动态建树最好 翻译时, 最后补一位空格符, 遍历字符串的时候遇到非字母时查询, 查到替换;遇到字母用数组保存当前数组AC code:/** Author : adrui* Language : C++* Result : Accepted* Love : yy* Favorite :原创 2016-11-10 17:48:32 · 481 阅读 · 0 评论 -
HDU 2604 递推 + 矩阵快速幂
HDU 2604题解:首先, 记长为n的队列的K队列数为f(n);易求得:f(0) = 0, f(1) = 2, f(2) = 4, f(3) = 6, f(4) = 9.当n >= 5时, 运用递推关系可推出:f(n) = f(n - 1) + f(n - 3) + f(n - 4);具体推导过程如下:设f(n)为字符串长度为n时复合条件的字原创 2016-10-06 18:37:40 · 442 阅读 · 0 评论