摘要: 题意:问最少多少个过同一点的平面能够将空间分成N份。解法:这题的基本思路肯定是求出x个平面最多能够划分出多少个子空间,然后二分枚举出答案。小涛神说了一种非常神的方法来解这一题,那就是得到三组最简单的解,假设最后的通项公式是一个最高次为1次的表达式,那么采用待定系数法用两组数据得到表达式然后使用第三组检验前两组得出的解。如果不相符的话那么再推出一个解,假设通项公式最高次为2次解方程...最后就能够得到这题的通项公式:f(x) = x*x - x + 2。 当然,我是想使用递推公式来解决这一问题,由于三个平面最多将空间分成8份,而在增加一个平面的话,由于所有平面都要过一个点,那么三个平面就已经确. 阅读全文
posted @ 2013-03-19 19:00 沐阳 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 题意:求出两点的距离。解法:由于有一种情况相加将超出long long的最大表示范围,由于计算机将减法都视作是加法,因此溢出之后的值如果使用无符号格式控制符来输出的话,结果是对的。代码如下:#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>using namespace std;int main() { int T; scanf("%d", &T); while (T--) 阅读全文
posted @ 2013-03-19 17:14 沐阳 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 题意:下图给定边长L和旋转角度a,求重叠之后的面积。解法:由于紫色的角已知是45度,加上a已知,可以推出phi等于a,设红色边长度为x,有x+x*cos(a)+x*sin(a) = L,根据公式得到x = L / (1+cos(a)+cos(a)),由于四个多出来三角形面积和形状都相同,因此重合的面积为L*L - 1/2 * x*cos(a) * x*sin(a) * 4 = L*L - x*x*sin(2*a)。代码如下:#include <iostream>#include <cstring>#include <cstdlib>#include < 阅读全文
posted @ 2013-03-19 17:10 沐阳 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 题意:有这样的一个需求,一个程序能够动态的插入数字,并且能够以很快的速度给出一个数字在已有的数字集合中异或之后值的最大或者是最小值。解法:将插入的数构成一棵字典树,然后将每一个数字以贪心的思想去匹配,如果一个数字为1010,要求与它异或之后值的最小值,只需要在为1的地方优先匹配1,为0的地方优先匹配0;如果是求最大值就把这个数字进行取反操作,然后找出一个数与取反之后的数异或值最小即可。代码如下:#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#incl 阅读全文
posted @ 2013-03-19 15:49 沐阳 阅读(290) 评论(0) 推荐(0) 编辑