自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

嗯。

嗯。

  • 博客(472)
  • 资源 (2)
  • 收藏
  • 关注

原创 2013成都现场

A. Assignment For Princess构造题B. Beautiful Soup模拟 未ACC. Clumsy AlgorithmD. Dinner Coming Soon优先队列+DPE. Exhausted RobotF. Fibonacci Tree生成树G. GRE Words RevengeAC自动机未ACH. Hard Dis

2015-03-24 15:54:18 976

原创 2013杭州现场

A Lights Against Dudely爆搜B Stealing Harry Potter’s Precious状态压缩DPC Zhuge Liang’s Password签到题D Problem of ApolloniusE Random Number GeneratorF Infinite GoG AntsH Rabbit Kingdom离线+

2015-03-24 15:48:01 1081

原创 2013常春现场

A.Hard Code签到题B.Golden Radio Base根据给你的2个公式 转化成φ进制C.Little Tiger vs. Deep Monkey简单DPD.BathysphereE.Min-max-multiplyF.RP problemG.Mosaic2维线段树模版题H.TowerI.String字符串哈希J.Tri-war

2015-03-23 13:32:18 871

原创 扩展baby step giant step模版

#include #include #include #include using namespace std;typedef __int64 LL;LL gcd(LL a, LL b){ return b ? gcd(b, a%b) : a;}LL pow_mod(LL a, LL p, LL n){ LL ans = 1; while(p) { if(p&1)

2015-03-16 16:42:27 704

转载 扩展欧几里德

扩展欧几里得算法求的是方程的解。原理如下 设,当时,,此时,否则设       由于,所以进一步得到        所以得到

2015-03-16 13:10:07 520

原创 BZOJ 2820 YY的GCD

#include #include #include using namespace std;typedef long long LL;const int maxn = 10000010;int mu[maxn], prime[maxn], vis[maxn], sum[maxn];int cnt;int a, b;void mobi(int n){ mu[1] = 1;

2015-03-11 15:04:10 751

原创 莫比乌斯模版

#include #include #include using namespace std;typedef long long LL;const int maxn = 100010;int mu[maxn], prime[maxn], vis[maxn];int cnt;int a, b, c, d, k;void mobi(int n){ mu[1] = 1; for(

2015-03-11 14:44:29 762

原创 Codeforces Round #291 (Div. 2)

A简单题B简单题C求改变一个字母的单词是否出现过字典树+dfsDk次射击 每次可以把一列都减小1 总共m列 m列都为0就被破坏掉 问最多连续多少个被破坏掉二分答案 在用数据结构询问某一段的最大值E每个节点都n个儿子 并且距离告诉你 无限延伸 问你距离根不超过x的节点有几个dp[i]为距离根i的数量 dp[i] = dp[i-1]*sum[1]+dp[

2015-03-07 14:22:34 678

原创 Codeforces Round #292 (Div. 1)

A简单题B用1*2的砖块铺满所有的点 方案数是否唯一消去度数为1的 直到不能消为止 还有点就是无解或者不唯一C求任意两个端点u,v, 2 * h[u] + 2 * h[v] + d[u] + d[u+1] + ... +d[v]的最大值转换a[i] = 2*h[i]+(d[1]+d[2]+...+d[i])b[i]= 2*h[i]-(d[1]+d[2]+...+

2015-03-07 14:06:49 548

原创 Codeforces Round #293 (Div. 2)

A简单题B简单题C简单题D简单期望E求最小的sum(|a[i]|) 使得每连续k个a[i]之和组成的新序列单调递增显然a[i]找到一段连续的?和左端点和右端点 贪心即可#include #include #include typedef __int64 LL;int a[100010], b[100010], c[100010];int n

2015-03-07 12:38:54 614

原创 Codeforces Round #294 (Div. 2)

A简单题B简单题C简单题D简单题E 一棵树 给你2个点 求树上有多少个点到这两个点的距离相等#include #include #include using namespace std;const int maxn = 100010;int anc[maxn][20];int fa[maxn], L[maxn], sum[maxn];

2015-03-04 14:27:05 607

原创 Codeforces Round #295 (Div. 1)

A简单题B有m个方块 每个方块有一个值 并且是堆起来稳定的 一个方块可以拿掉当且仅当剩下的还是稳定的 双方轮流拿 从左到右放组成一个m进制的数#include #include #include #include #include #include using namespace std;const __int64 mod = 1000000009;struct

2015-03-03 13:17:02 691

原创 SGU 131.Hardwood floor 状态压缩DP

#include #include typedef __int64 LL;LL dp[10][1<<10];int n, m;int st, flag;void dfs(int i, int s, int ns, int j, LL num){ if(j == m) { dp[i+1][ns] += num; return; } if((s&(1<<j)) == 0)

2015-03-02 14:27:19 1038

转载 AC自动机题集

1、 Hdu  2222 Keywords Search2、Hdu 3695 Computer Virus on Planet Pandora3、Poj 4052 Hrinity (金华邀请赛I)4、Zoj 3430 Detect the Virus5、Spoj 7758. Growing Strings6、Hdu 4417 GRE Words7、S

2015-02-14 15:12:04 612

原创 CF 题目小记sel

CodeForces 204A数位dp dp[i][s]表示第i位起始数字为s的个数CodeForces 257B设x为较大的个数 y为较小的个数 答案就是x-1, y 因为总数是确定的是x+y-1 对于每个数量较小的他旁边肯定有和他不同的

2015-02-09 13:49:25 892

原创 CodeForces 204A Little Elephant and Interval 数位DP

#include #include using namespace std;typedef __int64 LL;int a[33];LL dp[33][10];LL dfs(int x, int s, int e, int flag, int first){ if(x == -1) return s == e; if(!flag && dp[x][

2015-02-09 13:18:38 890

原创 树链剖分模版

#include #include #include using namespace std;const int maxn = 10010;struct edge{ int v, next;}e[maxn*2];int first[maxn], cnt;int top[maxn], dep[maxn], sz[maxn], f[maxn], son[maxn], rank[m

2015-02-02 13:34:48 767

转载 中缀式转换为后缀式(逆波兰式)方法

对于用低级编程语言是实现对运算式的处理,后缀式(逆波兰式)最为简便。下面是将中缀式(常见运算式)转换为后缀式的算法:栈底放‘#’,从左至右逐字读取中缀式:   a.当当前字符为数字时,直接输出;  b.当当前字符为"("时,将其压栈;  c.当当前字符为")"时,则弹出堆栈中最上的"("之前的所有运算符并输出,然后删除堆栈中的"(" ;   d.当当前字符为运算符时,则依次弹出

2015-01-06 14:15:20 1860

转载 0型文法、1型文法、2型文法、3型文法

0型文法、1型文法、2型文法、3型文法引用: ==================== S-> aaS|a是什么型的,为什么 S-> aSb|ab是什么型的,为什么 S-> SaS|b是什么型的,为什么 ===================== 答:三种文法都属于上下文无关文法。 四种文法的判断非常简单,说到到,四种文法就是规定产生式的左和右边

2014-12-31 21:33:27 3681 1

原创 POJ 1743 Musical Theme 后缀数组 不可重叠最长重复子串

二分长度k 长度大于等于k的分成一组 每组sa最大的和最小的距离大于k 说明可行#include #include #include using namespace std;const int maxn = 20010;int s[maxn];int sa[maxn];int t[maxn], t2[maxn], c[maxn];int rank[maxn], height[m

2014-12-15 17:57:33 881

原创 URAL 1495. One-two, One-two 2

找一个最小的数 不超过30位 只能由1 2组成的并且是n的倍数先算出15位 dp[i]表示余数为i的最小的数 dp2[i]表示长度正好是15位余数为i的最小的数#include #include #include #include using namespace std; typedef long long LL;LL dp[1000010], dp2[1000010];vo

2014-11-29 21:46:41 946

原创 编译原理 实验3 语法分析

语法分析一、 实验目的算术表达式的文法可以是(你可以根据需要适当改变):            E→E+E|E-E|E*E|E/E|(E)|i根据算符优先分析法,将表达式进行语法分析,判断一个表达式是否正确。二、 实验环境操作系统:window xp编写环境:visual c++ 编写语言:c语言三、 实验内容程序输入/输出示例:如参考C语言的运算符。输

2014-11-29 19:41:49 8172

原创 URAL 1287. Mars Canals 滚动数组+DP

求从上到下 从左到右 从左上到右下 从右上到左下的 最长的S和s串#include #include #include using namespace std;const int maxn = 1444;char a[maxn][maxn];int dp[2][maxn][2][4];int main(){ int n; int ans1 = 0, ans2 = 0; s

2014-11-25 16:58:58 810

原创 HDU 3094 A tree game 树的删边游戏

叶子节点的SG值为0 非叶子节点的SG值为为它的所有子节点的SG值加1 后的异或和#include #include #include using namespace std;vector G[100010];int sg[100010];int dfs(int x, int f){ if(sg[x] != -1) return sg[x]; if(!G[x].size

2014-11-20 14:23:47 982

原创 编译原理 实验2 DFA的运行

DFA的运行一、 实验目的1.理解有穷自动机的作用;2.利用状态图和状态表表示有穷自动机;3.以程序实现有穷自动机的运行过程;4.利用状态表和有穷自动机的运行原理编制程序,使得程序能够识别一个输入串是否为一个有效的符号串。具体可以选择下面之一:无符号定点实数,无符号正偶数,自然数,整数,十六进制数,或其他自己定义的符号串。二、 实验环境操作系统:window xp编

2014-11-14 17:53:07 3164

原创 HDU 3886 Final Kichiku “Lanlanshu” 数位DP

给你一个字符串/表示当前位比前一位小-表示和前一位相等\ 表示比前一位大  求a到b之间有多少个数满足方案dp[i][j][k] 到第i位满足字符串的第j位前一位是k的方案数#include #include using namespace std;const int maxn = 110;char s[maxn], A[maxn], B[maxn];int a[max

2014-11-13 09:31:58 1345

原创 ZOJ 3233 Lucky Number 容斥

给你a数组和b数组 求x到y之间有多少个数至少被a中一个数整除并且至少不被b中一个数整除容斥第一问很简单 第二问可以考虑反面设满足被a中至少一个数整除的数有sum1个 在被a中至少一个数整除的前提下 被b中所有数整除的数有sum2答案就是sum1-sum2在dfs的时候溢出了 借鉴了某大牛的方法#include #include using namespace std;

2014-11-07 19:45:35 1084

原创 ZOJ 3556 How Many Sets I 二项式+容斥

n个元素的子集有2^n个 求从这些子集选出k个组成有序集 并且有序集的交集为空的方案数总数为2^n^k 减去不符合的不符合的为交集存在1个共同元素 存在2个共同元素....2^n^k-C(n, 1)*2^(n-1)^k+C(n, 2)*2^(n-2)^k.... (2^k-1)^n#include #include using namespace std;typedef

2014-11-07 16:22:02 847

原创 URAL 1091. Tmutarakan Exams 容斥

从1到s选出k个数 他们的最大公约数大于1 求方案数容斥 S(1)-S(2)+S(3) S(x)为选出k个数的公因子个数为x的数量#include #include #include using namespace std;typedef long long LL;const int maxn = 55;int prime[maxn], vis[maxn];int n, m;

2014-11-07 10:46:51 745

原创 CF 479E Riding in a Lift 前缀和 DP

输入 n a b k 有n层楼 起点在a层 b层是不能到达的 假设当前在x层 每一次可以到达y层 满足 |x-y| dp[i][j]为第i次到达j层的方案数 dp[i][j] = sum(dp[i-1][k])  其中|k-j| 满足条件的k是连续的一段 用前缀和优化#include #include #include using namespace std;typedef l

2014-11-06 20:52:48 971

原创 CF 479D Long Jumps

#include #include #include #include using namespace std;int a[100010];int n;bool find(int x){ int l = 0, r = n-1; while(l <= r) { int m = (l+r) >> 1; if(a[m] == x) return true; i

2014-11-06 15:45:59 887

原创 编译原理 实验1 PL/0语言词法分析

PL/0语言词法分析一、 实验目的通过完成词法分析程序,了解词法分析的过程。编制一个读单词程序,对PL/0语言进行词法分析,把输入的字符串形式的源程序分割成一个个单词符号,即基本保留字、标识符、常数、运算符、界符五大类。二、 实验环境操作系统:window xp编写环境:visual c++ 、c-free、turbo c编写语言:c语言分析语言:PL/0三、 实验

2014-10-20 22:54:21 12813 3

原创 HDU 4085 Peach Blossom Spring 斯坦纳树 状态压缩DP+SPFA

状态压缩dp+spfa解斯坦纳树枚举子树的形态 dp[i][j] = min(dp[i][j], dp[i][k]+dp[i][l]) 其中k和l是对j的一个划分按照边进行松弛 dp[i][j] = min(dp[i][j], dp[i'][j]+w[i][j])其中i和i'之间有边相连#include #include #include using name

2014-10-17 11:14:07 1222

原创 POJ 3250 Bad Hair Day 单调栈

维护一个单调递减的栈 每次家进栈首的牛必定可以被其他栈里面的牛看到#include #include using namespace std;const int maxn = 80010;typedef unsigned long long LL;int a[maxn], s[maxn];int main(){ int n; scanf("%d", &n); for(int

2014-10-15 19:50:17 1028

原创 HDU 4424 Conquer a New Region 最大生成树

给你一颗树 每条边有一个权值 选择一个点为中心 定义中心到其他n-1个点的S值为中心到其他点的路径上的最小边权 求所有点S值的和从大到小排序 每次合并2棵树 设为A集合 B集合 设A集合的最大S值的和为sumA B集合为sumB中心在A或者B现在加入A-B这条边使得2个集合连通 因为A-B这条边的权值小于等于AB集合里面边的权值 所以如果合并之后中心在A 那么sumA = sumA+B集合

2014-10-14 21:23:18 818

原创 HDU 4081 Qin Shi Huang's National Road System 次小生成树

给你n个城市 每个城市有一定数量的人 现在要建一颗最小生成树 连接2个城市需要的花费是他们之间的距离可以免费建其中一条边 设A为免费的那条边连接的2个城市的人口之和 B为修建的最小生成树的花费 求最大的A/B先求最小生成树 设总花费为totol 然后可以枚举免费的那条边如果这条边是最小生成树里的边 那么很容易求得A/B 拿totol减去这条边就行了如果不是 那么把这条边加到最小生成

2014-10-14 17:19:56 838

原创 URAL 1542. Autocompletion 字典树

给你最多10w个单词和对应的频率 接下来最多1w5千次询问 每次输入一个字符串让你从前面的单词中按照频率从大到小输出最多10个以该字符串为前缀的单词开始把单词建成了字典树 然后每次询问找到所有满足条件的单词 在排序输出 不是超时就是超内存 还来了一发数组越界最后换方法 因为最多只要输出前10个 那么可以把要询问的字符串建字典树 每个结尾节点在做一个映射 存10个单词(当然只是存下标)然

2014-10-13 21:09:38 1161

原创 URAL 1553. Caves and Tunnels 树链剖分

一棵树 开始每个点的权值都为1 2种操作1.将第i个点的权值增加x 2.求u到v这条路上最大的权值树链剖分基础题#include #include #include using namespace std;const int maxn = 100010;struct edge{ int v, next;}e[maxn*2];int first[maxn], cnt;

2014-10-13 15:07:17 1129

原创 HDU 1695 GCD 欧拉函数+容斥定理

输入a b c d k求有多少对x y 使得x在a-b区间 y在c-d区间 gcd(x, y) = k 此外a和c一定是1因为gcd(x, y) == k 将b和d都除以k 题目转化为1到b/k 和1到d/k 2个区间 假设第一个区间小于第二个区间 讲第二个区间分成2部分来做1-b/k 和 b/k+1-d/k第一部分对于每个数i 和他互质的数就是这个数的欧拉函数值 所有数的欧拉函数的和就是

2014-10-13 14:06:45 927

原创 Light OJ 1373 Strongly Connected Chemicals 二分匹配最大独立集

m种阳离子 n种阴离子 然后一个m*n的矩阵 第i行第j列为1代表第i种阴离子和第j种阴离子相互吸引 0表示排斥求在阳离子和阴离子都至少有一种的情况下 最多存在多少种离子可以共存阴阳离子都至少需要存在一种 那么可以枚举哪2种离子共存 假设枚举a b 然后找到所有的和a可以共存的阴离子(设为x集合)以及和b共存的阳离子(设为y集合) 现在只需求x集合中和y集合中最多有多少个离子可以共存

2014-10-11 16:45:59 1182 2

ACM 学习资料

ACM 学习资料 包括一些压缩包 和 数据结构的一点东西

2013-11-29

数据结构课件

数据结构的课件 感觉比书上的代码容易理解

2013-09-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除