摘要: 将博客搬至CSDN. 阅读全文
posted @ 2013-09-17 18:44 好小孩 阅读(218) 评论(1) 推荐(0) 编辑
摘要: 简单的DFS 有些大神有树形DP做的,效率要高很多。 若degree[i] > 2 ,则断开 i 与其父节点之间的边 和 degree[i] - 3 个子节点之间的边,其父节点 度 减一。 此时总消费增加 sum += (degree[i] - 2)*2; 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #pragma comment(linker,"/STACK:102400000,102400000") 9 10 using namespace std;1 阅读全文
posted @ 2013-09-13 19:02 好小孩 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 迪杰斯特拉 + 优先队列 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 #define LL __int64 10 11 const LL INF = 2000000000; 12 13 using namespace std; 14 15 LL dis[300100]; 16 17 int head[300100]; 18 19 struct E 20 { 21 int u,v,w,next; 22 }edge[100... 阅读全文
posted @ 2013-09-12 20:26 好小孩 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 模板题。 数据范围较大时: 1 double cal(double x, double y) 2 { 3 double i, j, sum = 1; 4 if(y > (x/2)) 5 y = x - y; 6 7 for(i = x, j = 1; i > x-y; i--, j++) 8 { 9 sum *= i;10 sum /= j;11 }12 13 return sum;14 }View Code 数据范围较小时,可以用 C(n,m) = C(n-1.m-... 阅读全文
posted @ 2013-09-10 21:06 好小孩 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 早晨有点迷糊,读错题WA了一次,然后又CE了一次..... 给出一个字符串 均为小写字母 且 长度 = 3 时 f[len][i] = f[len-1][i+1] +……+f[len-1][26-len+1]; 统计时先统计比给出字符串长度短的情况,然后统计与其长度相等的情况。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 #define LL unsigned long long 8 9 using namespace std;10 11 char num[12];12 LL ans[12]... 阅读全文
posted @ 2013-09-08 09:24 好小孩 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 简单的组合数学。 题意:给出两个数,找出这两个数之间的Round Numbers。范围包括这两个数。 所谓的Round Numbers就是将给出的十进制数转化成二进制之后,0的个数 >= 1的个数。 思路: 设给出的数为m,其二进制长度为len。 先找出长度小于 len 的情况,这一种情况比较简单。 另一种就是寻找和 m 的长度相同且 2 #include 3 #include 4 #include 5 6 #define LL unsigned long long 7 #define Max(a,b) (a > b ? a : b) 8 9 using names... 阅读全文
posted @ 2013-09-07 19:54 好小孩 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 设三角形三边为a,b,c, c 为最大边。 当c == n时,有 a的取值范围为[2,n-1]. b的取值范围为[n-a+1,n-1]; 共有 sum = n*n - 3*n +2 种情况。但是其中又不符合题意的情况,即 a == b 且 每种符合题意的三角形均被计算了两次。 a == b 的情况 只有当 a 的取值大于 n/2 时才会存在,即总共有 s = n/2 - 1 种情况。 所以当c == n 时 总的方案数为 ans = (sum - s)/2,所以n每自加一次,总的方案数就增加 ans(n)。 又易得 n == 3时,方案数为0. 所以有 总方案数为 z[n]... 阅读全文
posted @ 2013-09-05 09:40 好小孩 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 这道题有一个简单的思路 就是 a+b-gcd(a,b); 另一种就是就是递归求解。 (1) 当Max == Min时,显然蛋糕要均匀的要分成Max(Min)份。 (2)当 Max != Min 时,设m = Max/gcd(Max,Min)*Min; 此时应该将蛋糕的 (Min*Min)/m 部分分成 Min份,即每份Min/m = Min*Min*gcd(Min,Max)/Max。 把剩下的部分看成一个新的蛋糕去均匀的分给Min和Max-Min个人。 直到Min == Max-Min,递归结束。 当剩下的部分分成的份数可以均匀的分给Min 和 Max-Min... 阅读全文
posted @ 2013-09-03 19:58 好小孩 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 简单的欧几里得函数应用。 f(x,y) = f(y,x%y); f(x,y) = f(y*t+x,y) t为非负整数; 其时这道题还有好多优化,Discuss里面好多大神都弄到了0ms。。。Orz 我只水过去了。。。。 G++ 2400++,用C++ TLE.... 特别的注意 1 的情况 RE了好多次 1 #include 2 #include 3 4 using namespace std; 5 6 long long int rp[1000010]; 7 8 long long int gcd(long long int a,long long int b)... 阅读全文
posted @ 2013-08-31 09:35 好小孩 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 数学基础第一弹! 简单的递归题,没有什么可说的。只是要细心细心再细心,不要心浮气躁,急于求成。 1 #include 2 #include 3 4 using namespace std; 5 6 long long int CountTriangle[1000010]; 7 8 int main() 9 {10 int i,j,n;11 12 long long int sum;13 14 CountTriangle[1] = 1;15 CountTriangle[0] = 0;16 17 for(i = 2;i >n)29 ... 阅读全文
posted @ 2013-08-30 20:56 好小孩 阅读(209) 评论(0) 推荐(0) 编辑