摘要:
找规律的题目。如果不是圆环形状的话(也就是n个人排成直线),完全调换顺序需要(n-1)*n/2次交换;为环形的时候,可能不需要这么多,因为调换有了两个方向。我们记直线时n个人需要的交换次数为g(n)=(n-1)*n/2,显然g(n)是以n的平方增长的,所以要使总的交换次数尽量少,最佳情况就是将n分成尽量平均的两部分,分别向两个方向交换。/* * hdu1214/win.cpp * Created on: 2011-10-12 * Author : ben */#include <cstdio>#include <cstdlib>#include <cstring& 阅读全文
摘要:
求多边形重心的题目大致有这么几种:1,质量集中在顶点上。n个顶点坐标为(xi,yi),质量为mi,则重心 X = ∑( xi×mi ) / ∑mi Y = ∑( yi×mi ) / ∑mi 特殊地,若每个点的质量相同,则 X = ∑xi / n Y = ∑yi / n2,质量分布均匀。这个题就是这一类型,算法和上面的不同。 特殊地,质量均匀的三角形重心: X = ( x0 + x1 + x2 ) / 3 Y = ( y0 + y1 + y2 ) / 33,质量分布不均匀。只能用积分来算,不会……下面讨论这个题的解法:以第一个顶点为基准,分别连接p[i],p[i+1],1&l 阅读全文
摘要:
其实还是汉诺塔问题,给你一个状态,问是否是正确状态转移过程中的状态。当盘子数为n时,只需要看最大的盘子在哪根柱子上,三种情况分别递归判断即可~/* * hdu1997/win.cpp * Created on: 2011-10-9 * Author : ben */#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <iostream>#include <queue># 阅读全文
摘要:
简单的找规律题,假设连续序列为a, a+1, a+2,...,a+k则(2*a+k)*(k+1)/2=N,从而a可以用N和k表示出来,而通过这个公式能够发现k一定小于sqrt(2*N+1),枚举k,计算出a判断是否符合题意即可。/* * hdu1868/win.cpp * Created on: 2011-10-8 * Author : ben */#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#incl 阅读全文
摘要:
现场赛中最水的题,发现这题时比赛已经进行了半个小时,可是我打了半个小时还没有搞定,看着旁边的队伍一个个地升起气球,更加紧张,后面还有一点小问题干脆让海峰写了。今天发现杭电加了现场赛的题目,20分钟就把这题给过了。看来赛场上的心理素质还得训练,不然正式比赛的时候难以发挥出最好的水平~/* * hdu4054/win.cpp * Created on: 2011-10-6 * Author : ben */#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#inc 阅读全文
摘要:
参考网上大牛的方法做的,A了,但做法的可行性我还没有想明白。慢慢再想吧,先贴代码~/* * hdu1569/win.cpp * Created on: 2011-10-5 * Author : ben */#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <iostream>#include <queue>using namespace std;typedef int 阅读全文
摘要:
一看就是网络流,直接上Dinic模板,交上,RE,把MAXM改成500,过了,对出题者无语!/* * hdu1532/win.cpp * Created on: 2011-10-5 * Author : ben */#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <iostream>#include <queue>using namespace std;typede 阅读全文
摘要:
这题可以用最大流做,为了练DP就用状态压缩了。我一开始只想到一个O(n*2^n*2^n)的方法,效率太低,看了某大牛的解题报告后,才将算法优化到O(n^2*2^n)。不过就这样还WA了好几次,原因是代码中一句if ((k & t) == 0)我开始写成了if (k & t == 0)没有注意到位运算符的优先级是低于逻辑运算符的,谨记谨记!/* * hdu1565/win.cpp * Created on: 2011-10-4 * Author : ben */#include <cstdio>#include <cstdlib>#include < 阅读全文
摘要:
应该说,就是道DP题,最近用记忆化搜索用得老爽了,就用了~/* * hdu1521/win.cpp * Created on: 2011-10-3 * Author : ben */#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <iostream>#include <queue>using namespace std;const int MAXN = 12;con 阅读全文
摘要:
首先要能推出公式,结果其实就是C(n,m),接下来求C(n,m)就用到了公式C(n,m)=C(n-1,m)+C(n-1,m-1)。我用记忆化搜索做的,觉得记忆化搜索写起来就是简捷啊~/* * hdu1799/win.cpp * Created on: 2011-10-3 * Author : ben */#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <iostream>#in 阅读全文