12 2012 档案
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4059题目大意:给你一个整数n,让你求前面n个数中与n互素的数E(x^4)的和。解题思路: 可以先求出Sum(n):表示1^4+2^4+3^4+……+n^4; 然后再求Sum(n)-E(x^4) ,x表示与 n不互素的数。 求与n不互素的数可以利用容斥定理,求Sum(n)可以利用差分。简单介绍一下差分序列:给你一列数 a[i][1],a[i][2],a[i][3],a[i][4],a[i][5]……那么a[i][j]=a[i-1][j+1]-a[i-1][j], 即后一行是上一行相邻两项的差(第..
阅读全文
摘要:题目连接:http://poj.org/problem?id=3667题目大意:让你对一个区间进行操作。输入Q C 或者 Q C D。Q ==1 输入C: 表示让你求1-n中是否有连续的C个空hotel,如果有多个连续的C个空hotel,则取最左边的,并输出最左边的第一间hotel标号。让人住进去,那么这些空房就不能住人了。如果不存在连续的C个hotel,则输出 0。Q==2 输入 C D: 表示 从标号C到C+D-1的hotel的房间全部要退房,那么这么hotel都变成空。解题思路:用到线段树的区间操作,具体解析见代码。 1 #include <cstdio> 2 #includ
阅读全文
摘要:题目链接:http://poj.org/problem?id=2777题目大意: 给你一段区间[1,L] , 给定初始所有节点颜色为1,有下面两种操作:1、 “C A B D” 将区间[A,B]改变颜色为D。2、“P A B” 计算区间[A,B]有多少种不同的颜色。解题思路: 最土的可能100000个节点*100000次运算,暴力肯定TLE。解决这一类题目一般会想到线段树或者树状数组,这里用线段树。 这里每次改变都从根节点到叶子节点都同步更新的话肯定TLE,这里又要用到区间更新。 区间更新: 区间更新指的是当要改变某个区间[tl,tr]的颜色值,当往下递归到这个区间[l,r]包含在[tl,..
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3037题目大意:求在n棵树上摘不超过m颗豆子的方案,结果对p取模。解题思路:题目可以转换成 x1+x2+……+xn=m 有多少组解,m在题中可以取0~m。利用插板法可以得出x1+x2+……+xn=m解的个数为C(n+m-1,m);则题目解的个数可以转换成求 sum=C(n+m-1,0)+C(n+m-1,1)+C(n+m-1,2)……+C(n+m-1,m)利用公式C(n,r)=C(n-1,r)+C(n-1,r-1) == > sum=C(n+m,m)。现在就是要求C(n+m,m)%p。因为n,m
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2992题目大意:有一家物流公司要送货炒年糕起点(1)送到终点(n),途中有n个城市其中只有h家客栈是免费休息的,途中有m条路通向不同的城市,开车的司机每天最多开10个小时的车程,问你起点送货到终点最少需要住几家客栈(规定只能住自家免费客栈)。 如果答案不存在输出-1。解题思路: 司机从起点或者休息的客栈出发,落脚点必是下一家休息的客栈或者终点。所以对每家客栈(包括起点)spfa一次,找出客栈间最小车程小于十小时的,如果两件客栈间车程小于10小时则令他们的行走天数g[u][v]为1。 开始把终点也放.
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3594题目大意:给你一个图,让你判断他是不是仙人掌图。仙人掌图的条件是:1、是强连通图。2、每条边在仙人掌图中只属于一个强连通分量。仙人掌图介绍 --> http://files.cnblogs.com/ambition/cactus_solution.pdf解题思路:1、首先得先熟练掌握塔尖tarjan算法的应用。2、必须了解仙人掌图的三个性质:(1).仙人掌dfs图中不能有横向边,简单的理解为每个点只能出现在一个强联通分量中。(2).low[v]<dfn[u],其中u为v的父节点(3
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=35381005题目大意:告诉你f[1]=1, f[2]=1, f[n]=(A*f[n-1]+B*f[n-2])%7;然后输入A,B,n,让你求f[n]。解题思路:解法1:n比较大,给你这样递推式子一般不可能让你全部求出来,一般是有规律可寻的。只要在递推的过程中发现f[n-1]==f[1],f[n]==f[2],停止递推。把它多少个数循环一次记录下来,然后只需要用
阅读全文
摘要:题目链接:http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=28547题目大意: 给你两个整数n,k,让k不停平方,每次平方完取出前n位数,让你找到最大的前n位数。解题思路: 自己列几项就可以看出一定是一个循环。当发现有重复的出现时循环就结束。 本题解法好多。解法1,用sstream流和set函数,4494ms。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <set> 4 #include <cs
阅读全文
摘要:题目链接:http://acm.fzu.edu.cn/problem.php?pid=2015题目链接 :http://acm.fzu.edu.cn/problem.php?pid=2020解题思路:2015可以利用公式C(n)(r)=C(n-1)(r)+C(n-1)(r-1) 打表。剩下的问题就转换成了如何列出2020 两个大数相除再取模(比如(a/b)%mod)可以转换成 a*Inv(b,mod),相除取模可以转换成分子乘分母对模数的逆元。如果题目要你求多个组合数的话,那么也可以打表求出前maxn项 f[i]%mod =(1*2*3*……*i)%mod;两个输出的时候都要注意判断答案是不是
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586题目大意:有一棵n个节点n-1条边的树。然后给你两个点u,v,让你求u到v的距离。解题思路: m询问次数比较小,算一下时间复杂度。用邻接表+bfs完全可以过。 会的就不写了,这里我用邻接表+dfs+LCA。做的最近公共祖先第一题。可做模板。 感谢袁神!!! 1 #pragma comment(linker, "/STACK:1024000000,1024000000") /// hdu可以用这个操作防止栈溢出,强大~ 2 #include <iostream>
阅读全文