
补充
文章平均质量分 66
Tuesday..
这个作者很懒,什么都没留下…
展开
-
【分治法】循环赛事表
题意:有2k2^k个运动员进行网球循环赛,设计赛事表使得:每个选手与其他n-1个选手各赛一次每个选手每天只能赛一次循环赛在n-1天内结束日程表第i行第j列表示第i个选手在第j天遇到的选手分析:考虑k=3,n=8的情况,利用分治思想,将所有选手不停的分为两组,最终转化为只剩两个人进行比赛,再根据两个人的比赛安排得到整体赛事表。先列出要比赛的8位选手 for(int i = 1 ; i <=原创 2015-12-28 19:45:43 · 668 阅读 · 0 评论 -
最近公共祖先(Least Common Ancestors)
题意:给定一棵有根树T,给出若干个查询lca(u, v)(通常查询数量较大),每次求树T中两个顶点u和v的最近公共祖先,即找一个节点,同时是u和v的祖先,并且深度尽可能大(尽可能远离树根)。通常有以下几种算法:在线算法,每次读入一个查询,处理这个查询,给出答案。离线算法,一次性读入所有查询,统一进行处理,给出所有答案。在线:倍增(基于二分搜索):基本思想就是让u和v同时走到同一高度,然后再一起原创 2016-03-24 22:33:28 · 520 阅读 · 0 评论 -
八皇后问题 回溯
作为回溯法的典型,水一下。题意:棋盘上放置8个皇后,每个皇后的攻击范围为同行同列和同对角线。要求找出所有解,使得她们互不攻击。分析:回溯法。 逐行放置,对列和对角线进行检查,使用vis数组保存状态。回溯注意在各个出口都要将条件“恢复原状”。代码:#include<iostream>using namespace std;const int maxn = 25;int cnt = 0, m ,原创 2016-03-15 08:08:17 · 535 阅读 · 0 评论 -
UVA 11827 Maximum GCD【GCD,stringstream】
这题没什么好说的,但是输入较特别,为此还WA了一次。。。题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2927题意:输入m个数,求两两一组的最大GCD。分析:对stringstream不太熟悉,直接模拟字符串的输入,但是wa了。 我觉得wa的原原创 2016-04-07 19:46:49 · 675 阅读 · 0 评论 -
【数学】扩展欧几里得算法
欧几里得算法:辗转相除计算两个数的最大公约数,求gcd(a,b)gcd(a,b)。证明:设a=b∗p+qa=b*p+q,则gcd(b,q)|bgcd(b,q)|b ,gcd(b,q)|agcd(b,q)|a ,故gcd(b,q)|gcd(a,b)gcd(b,q)|gcd(a,b) 。 同样q=a−b∗pq=a-b*p,则gcd(a,b)|qgcd(a,b)|q,故gcd(a,b)|gcd(b,q)原创 2016-02-07 12:31:19 · 3421 阅读 · 1 评论 -
POJ 2104 K-th Number【整体二分 + 树状数组】
本来只是想学一下CDQ,还是先把整体二分搞懂一点。这题窝几个月前分别用划分树,树套树,主席树和挑战上介绍的分桶法实现了一发(然而现在都忘得差不多了) 最快的是划分树,其次是主席树,然后是树套树,还有一个10000+ms分桶法的思想实现的,最上面的就是整体二分的方法。题目链接:http://poj.org/problem?id=2104题意:给定序列,求每次询问区间的第K大数。分析:首先介绍整体原创 2016-04-29 01:09:02 · 7956 阅读 · 0 评论 -
HDU 5673 Robot【卡特兰数】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5673题意:有一个机器人位于坐标原点上。每秒钟机器人都可以向右移到一个单位距离,或者在原地不动。如果机器人的当前位置在原点右侧,它同样可以向左移动单位距离。一系列的移动(左移,右移,原地不动)定义为一个路径。问有多少种不同的路径,使得nn秒后机器人仍然位于坐标原点?答案可能很大,只需输出答案对1,000,原创 2016-04-23 10:45:52 · 602 阅读 · 0 评论 -
博弈小结
最近刷了几道比较水的博弈题,对于博弈题多少有点感觉了,先总结一下,等填完其他坑,再刷下sgsg函数,到时候再来补充。博弈基本知识的介绍 http://blog.youkuaiyun.com/lionel_d/article/details/43939605#commentspoj 1067 取石子游戏 裸威佐夫博弈 poj 1740 A New Stone Game 深入体会博弈中的制造对称状态原创 2016-07-31 23:13:39 · 825 阅读 · 0 评论 -
乘法逆元小结
在求解除法取模问题时(a/b)%m (a/b) \% m,我们可以转化为(a%(b∗m))/b(a \% (b * m))/b, 但是如果b很大,则会出现精度问题,所以我们避免使用除法直接计算。 可以使用逆元将除法转换为乘法: 假设b存在乘法逆元,即与m互质(充要条件)。设c是b的逆元,即b∗c≡1(modm)b * c \equiv 1 (modm),那么有a/b=(a/b)∗1=(a/b)原创 2016-04-09 14:28:44 · 9575 阅读 · 6 评论 -
HDU 5643 King's Game 【约瑟夫环】
题意:变形的约瑟夫环,最初为每个人编号1到n1到n,第i次删去报号为i次删去报号为i$的人,然后从它的下一个人开始重新从1开始报号,问最终剩下第几号人?分析:首先看一下裸的约瑟夫环问题: 共n个人,从1开始报数,报到k的人从环中退出,问最后剩下的一个人的编号是?为取模方便,假设下标从0开始,倒推分析: 假设该轮有nn个人,那么上一轮(n+1)(n+1)人,编号为00的人上一轮编号为k,也即编原创 2016-03-13 12:53:00 · 3110 阅读 · 0 评论 -
POJ 2109 Power of Cryptography【高精度+二分 Or double水过~~】
题目链接:http://poj.org/problem?id=2109参考:http://blog.youkuaiyun.com/code_pang/article/details/8263971题意:给定n,pn,p,求kk使得kn=pk^n=p(1≤n≤2001\le n\le 200, 1≤p<101011 \le p\lt 10^{101}, 1≤k≤1091\le k\le {10^9})分析:高精度原创 2016-03-24 14:32:57 · 440 阅读 · 0 评论 -
C++ fill 和memset
以下内容来自www.cplusplus.com---------------------------------------------------FILL:template void fill (ForwardIterator first, ForwardIterator last, const T& val);Fill range with valueAs原创 2015-10-31 16:57:25 · 806 阅读 · 0 评论 -
lower_bound和upper_bound
low_bound函数原型:templateForwardIterator lower_bound(ForwardIteratorfirst,ForwardIteratorlast,constT&val);返回非递减序列(first,last)中第一个大于等于val的元素位置。upper_bound函数原型:templateForwardIterator upper_b原创 2015-12-05 15:28:21 · 697 阅读 · 0 评论 -
【动态规划】最长上升子序列(LIS)
今天看了《挑战程序设计竞赛》的动态规划部分,感觉对以前一些知其然却不知其所以然的问题有了更好的理解,先整理一部分。题意:有一个长为n的数列a0,a1,a2,...,ana_0,a_1,a_2,...,a_n 。请求出这个序列中最长的上升子序列的长度。上升子序列指的是对于任意的i<ji<j都满足ai<aja_i<a_j的子序列。分析:设dp[i]dp[i]为第i个下标之前第i个下标之前的子串中最长上升原创 2016-02-01 21:46:43 · 682 阅读 · 0 评论 -
静态区间第k大(划分树)
划分树:思想:利用快速排序思想,建树时将区间内的值与区间中值相比,小于则放入左子树,大于则放入右子树,如果相等则放入左子树直到放满区间一半。查询时,在建树过程中利用leftsum[p][i]leftsum[p][i]数组保存有多少个数划分到第pp层,第ii个位置的左边。每次查询计算出每个区间有多少数被放入左子树,小于等于kk则说明所求数在左子树,继续查询其左子树,反之则查询右子树。l==rl==原创 2016-02-13 22:34:02 · 856 阅读 · 2 评论 -
静态区间第k大(归并树)
POJ 2104为例思想:利用归并排序的思想:建树过程和归并排序类似,每个数列都是子树序列的合并与排序。查询过程,如果所查询区间完全包含在当前区间中,则直接返回当前区间内小于所求数的元素个数,否则递归的对子树进行求解并相加。使用STL中的merge对子序列进行合并及排序。时间复杂度O(nlogn+mlog3n)O(nlogn+mlog^3n)代码(vector实现):#include<cs原创 2016-02-15 12:05:28 · 936 阅读 · 0 评论 -
静态区间第k大(分桶法和平方分割)
思想:《挑战程序设计竞赛》中介绍的方法。 分桶法:把一排物品或者平面分成桶,每个桶分别维护自己内部的信息,已达到高效计算的目的。设一共有nn个数,一个桶有bb个数,给定区间,求小于x的数的个数对于完全包含在区间内的桶,直接二分查找满足条件的个数,每个桶处理需要O(logb)O(logb)的时间。剩余的不完全分布在其他桶的数,逐个查找,每个元素处理需要O(1)O(1)的时间。可以看出,应该原创 2016-02-15 12:33:23 · 1709 阅读 · 4 评论 -
静态区间第k大(主席树)
POJ 2104为例(主席树入门题)思想:可持久化线段树,也叫作函数式线段树,也叫主席树(高大上)。 可持久化数据结构(Persistent data structure):利用函数式编程的思想使其支持询问历史版本、同时充分利用它们之间的共同数据来减少时间和空间消耗。 主席树:对原序列的每一个前缀[1..i][1..i]建立出一棵线段树维护值域上每个数的出现次数(所以要先离散化)。线段树每原创 2016-02-16 12:52:12 · 1004 阅读 · 2 评论 -
SOJ 4454 (矩阵快速幂)
先引入数的快速幂例如计算2的5次方,常规算法2*2*2*2*2,利用快速幂的思想,求出5的二进制表达式101,权值为1和4的位上数字为1,即2^5=2^1*2^4。代码如下,时间复杂度为O(logn)#includeusing namespace std;typedef long long ll;const int mod=1000000007;ll quick_pow(int原创 2015-12-12 12:17:38 · 510 阅读 · 0 评论 -
八数码总结
题意:八数码问题也称为九宫问题。编号为1~8的8个正方形滑块被摆成3行3列,棋盘上还有一个空格,每次可以把与空格相邻的滑块移到空格中,而它原来的位置就成了新的空格。给定初始局面和目标局面,计算出最少的移动步数。 参考来源:八数码的八境界方法1:暴搜+queue,如果空格用’0’表示的话可以直接将状态压缩成一个9位整数,也可以用字符串表示状态,用结构体表示状态+步数+空格的位置。代码:/*2641原创 2016-03-18 11:29:47 · 1754 阅读 · 1 评论 -
均分纸牌及糖果传递问题
题目链接:http://codevs.cn/problem/1098/题意:有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌,然后移动。 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。 现在要求找出原创 2016-05-17 17:03:01 · 1041 阅读 · 0 评论