摘要: 适用范围: p是一个素数,且p不能超过10^5(大约)基础知识: Lucas定理: 即将m转化为p进制,每一位数是m0,m1..,n也转化为p进制,n0,n1... C(m,n)==C(m0,n1)*C(m1,n2)*...%p; 例如:m=100,n=50,p=17; m0=m%17=15;m1=(m/17)%17=5; n0=n%17=16;n1=(n/17)%17=2;(就是普通的进制转化) C(100,50)=C(15,16)*C(5,2)%p=0;(注意,当ni>mi时,结果为零,可以直接结束... 阅读全文
posted @ 2012-08-17 19:36 炎色 阅读(3453) 评论(0) 推荐(0) 编辑
摘要: 队伍里面我负责图论相关的问题,从最短路开始 1.单源起点最短路+单源终点最短路——http://poj.org/problem?id=3268 利用矩阵转置 2.求最大环最小环——http://acm.hdu.edu.cn/showproblem.php?pid=1599 对 floyd特殊处理 3.双调欧几里德旅行商问题——http://acm.hdu.edu.cn/showproblem.php?pid=2224 dp(有点不理解) 4.待续... 阅读全文
posted @ 2012-07-28 18:06 炎色 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1385题目意思很明确,这里就不讲了从这道题的年份来看,n应该不会超过100,没有用floyd( 效率不高,不喜欢用),选择了dijkstra注意两个点:一.起点和终点一样的情况,容易解决二.字典序大小比较时,要把当前的点加进路径比较,discuss有个例子40 2 3 92 0 1 53 1 0 39 5 3 10 0 0 01 4------------output应该是 1->2->3->4这条路径吧。以前我的是 1->3->4也a了(原话,完全引用)当前点不加进结 阅读全文
posted @ 2012-07-18 18:10 炎色 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 源地址:http://acm.hdu.edu.cn/showproblem.php?pid=1142题目大意:起点1,终点2,A与B想邻,如果B到终点的距离小于A到终点的距离,则A到B算一种走法(感觉解释的很烂,还是自已去看原题吧)思想:求出所有点到2点的距离,用dijkstra,没有什么特别的,接着dfs,从1点开始,对1 点相邻的点并且距离比他短的进行深搜,返回路径数/*最短路+dfs*//*使用了不常用的vector,queue,有错误提醒下*/#include<iostream>#include<vector>#include<cstdlib>#in 阅读全文
posted @ 2012-07-18 15:10 炎色 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 在搜索HDU RMQ题目时,发现了这道题,有人说是用RMQ,用线段树加贪心的也有,想太多了,实际上贪心够了。主要思想,i=0 -> n,如果a[i]>a[i+1],a[i]去掉,即前面的数要小于后面的数,代码详解 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 int main() 5 { 6 char b[1010];//输入 7 int a[1010],i,j,k,n,m;//转化为整数 8 int c[1010];//保存结果 9 while(cin>>b& 阅读全文
posted @ 2012-07-18 14:44 炎色 阅读(312) 评论(0) 推荐(1) 编辑