随笔分类 -  数学

摘要:http://www.bianchengla.com/course/cpp/practise/problem?id=1269可以计算出投一次可得的分数是1*1/6 + 2 * 1/6 + 3 * 1/6 + 4 * 1/6 + 5 * 1/6 + 6 * 1/6 = 3.5 ;然后n次的期望就是3.5*n;代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include 阅读全文
posted @ 2013-02-20 15:11 Misty_1 阅读(280) 评论(0) 推荐(0)
摘要:题意:p strat end ,表示员工i开始工作的星期,以及被解雇的星期,和在这期间他共加工了p种首饰,下一行是他都加工了哪几种首饰,问你通过这些记录是否能得出加工每种首饰需要多少天。思路:典型的高斯消元,设每种首饰需要的天数为xi,这个的每个记录就是一个方程,所以用高斯消元法解这个方程组就可以了,需要注意的是,他给出的是一个星期中的某一天,但他做了几个星期不知道,a1*x1 + a2 * x2 + .....=( b + 7 * x ) % 7 ;在本题中要注意%7 ,嗯,每个地方都要摸,不能超出7。代码:View Code #include <stdio.h>#include 阅读全文
posted @ 2012-08-20 11:09 Misty_1 阅读(153) 评论(0) 推荐(0)
摘要:题意:将1到N个数全排列,找出最长上升子序列和最长下降子序列中的较小值,并按字典序输出这个排列。思路:其实这题真没什么具体方法,如果你的逻辑思维能力较好的话,可以很轻松想出来,不过我是看了题解才明白的,如果N是一个平方数,例如9, 1 , 2 , 3 , 4 , 5 , 6 , 7 ,8 , 9它的答案是:3 ,2 , 1 , 6 , 5 , 4,9 , 8 ,7 ,即将序列分成sqrt(n) 段,然后每段都倒序,这样最小的值就是3 ,如果不是平方数,可以分两种情况,m = ceil(sqrt(n)) ;一种是(m-1)*m <n ,一种是(m-1)*m >= n 。呃,怎么解释这 阅读全文
posted @ 2012-08-17 16:07 Misty_1 阅读(340) 评论(3) 推荐(0)
摘要:呃,有好久没写博了,很无奈呢,每次做完题总是会忘了这最后一步。。。。这题是上次比赛的一道题,比赛中就认为这题有技巧,其实在比赛中XH就找到了结论,但是由于当时我们俩都没接触过快速判素和快速求质因子的方法,也就是Miller_Rabbin和Pollard_Rho方法,所以尝试了几次打表,结果没过,然后就不了了之了。赛后看了解题报告,知道思路没错,有用打表的方法做了两遍,还是原样,题解中说用到了Pallard_Rab求质因子,所以就上网搜搜了,然后直到今天才做这题。题意:求出N的所有因子,然后选出尽可能多的元素,是的选出的元素两两互质,求出最长的长度和这些元素的最大和。思路:为了尽可能多的选出,每 阅读全文
posted @ 2012-08-10 21:17 Misty_1 阅读(274) 评论(0) 推荐(0)
摘要:前两天做了北航上的一道大整数数,顺便复习一下大整数的运算~http://www.bianchengla.com/oj/1/practise/problem?id=1001#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <string>#include <algorithm>using namespace std ;int f ;class node{private: static int COMPARE( 阅读全文
posted @ 2012-07-14 10:58 Misty_1 阅读(172) 评论(0) 推荐(0)
摘要:其实真的没读懂这题是什么意思,读了好几遍题怎么都弄不懂它到底想让求什么的,最后还是查了解题报告,但是他们讲的题意仍是不明白,直到看了代码才似乎明白点他的意思,唉,这个英语啊!我理解的题意:将每一个Pie都要平均分成x份,所有的x加起来要大于等于朋友数f。思路:二分,将最大的一份pie平均分f份,这当然包括他自己,作为二分查找的下限,将所有pie平均分成f份,作为二分查找的上限。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include 阅读全文
posted @ 2012-06-28 11:43 Misty_1 阅读(161) 评论(0) 推荐(0)
摘要:先说点题外话,昨天看了cq学长写的日志,他说我们的语言表达能力太弱,我觉得很对,以前写解题报告的时候,虽然知道怎么做出来的,可是就是无法用语言清晰的表达出来,有时嫌麻烦就直接粘了别人的一些话了说明,一篇报告总是弄的前言不搭后语的,其实语言表达能力也很重要。所以,以后会让自己尽量少的引用别人的话,尽量用自己的语言表达出想表达的意思。现在再来说说这道题,其实是一道很水的题,不过题意很容易让人误解,我就被误解了~~这题是用到了堆,不过如果我告诉你这题其实就是让你求第K小数的话,相信你不用优先队列也一样可以求出来。解题思路:用分治法,是大顶堆的堆顶元素始终小于小顶堆的堆顶元素,这样的话大顶堆中的所有元 阅读全文
posted @ 2012-05-28 21:33 Misty_1 阅读(203) 评论(0) 推荐(0)
摘要:其实完全没想做这题的,因为不想这个时候在花些时间学习新的方法,但是打开了这道题就想把它做出来,像是一种本能吧。以前从没听过pick 定理,更何谈用它做题,所以只能上网搜了一些关于它的讲解,发现其实很简单,就是一个公式:Pick定理 设以整数点为顶点的多边形的面积为S,多边形内部的整数点数为N,多边形边界上的整数点数为L,则 N+1/2L-1=S.但往往越是简单的公式,推导过程越是复杂。看了一下维基百科上的证明,感觉不是很详细,但是他下面有给出的外部链接,其中有一篇全是繁体字的,偶然搜到一篇博客,上面有这篇文章的简体翻译,简要看了一下,没细研究,留下链接,以后有时间慢慢专研吧。http://tr 阅读全文
posted @ 2012-05-08 20:10 Misty_1 阅读(219) 评论(0) 推荐(0)
摘要:呃,整整坐了一天,终于弄懂了这题,同时也弄明白了一个知识点——扩展欧几里德算法,真不容易啊!恩,怎么解释呢,从这道题说起吧。解这题的思路就是:(a+x*c)%2^k=b,即x*c=(b-a)%2^k。扩展欧几里德算法就是对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。解x,y的方法为:1、b=0时,x=1,y=0,gcd(a,b)=a;2、a*b<>0时,a*x1+b*y1=gcd(a,b);b*x2+(a%b)*y2=gcd(b,a%b);根据朴素欧几里德定理知道,gcd(a,b)=g 阅读全文
posted @ 2012-05-04 19:22 Misty_1 阅读(414) 评论(1) 推荐(0)
摘要:刚开始学习数论,不知道该从哪方面学起,就找了这道题做做,希望通过做题能找到学习数论的方向。花了有两天的时间终于弄懂了这题的思想,恩,数论真的很神奇!题意是:求a^b的所有因子的和取余9901后的结果。用到的知识点有:(1)素因子分解唯一性定理:任意正整数都能用一种方式且只有一种方式写出素数的乘积。如:60 =2^2*3*5(2)约数和公式:将A^B分解成素因数形式:A^B=(p1^k1)*(p2^k2)*(p3^k3)………那么A^B所有因子之和就是 S=(1+p1+p1^2+p1^3+…..p1^k1)*(1+p2+p2^2+p2^3+…..p2^k2)*(1+p3+…)*…………..然后就 阅读全文
posted @ 2012-05-03 17:07 Misty_1 阅读(315) 评论(3) 推荐(0)
摘要:呃,对自己表示很无奈,明明很清晰地一道题,愣是用了好长时间才做出来,不是没思路,是没整理好思路,没法写代码,好吧,以后要加强!题目大意:所有对4取余余一的数都为H-numbers,只有1和它本身两个因子的H-numbers数为H-primes,有两个H_primes的乘机组成的H_numbers称为H-composites,题目是给你一个数,让你求1到H的所有H-composites。方法很简单,就是筛选法,但是还有一种情况就是,不是完全有两个H_primes组成的数,这种情况要去掉。具体看代码吧。代码:#include <stdio.h>#include <stdlib.h 阅读全文
posted @ 2012-04-27 15:46 Misty_1 阅读(141) 评论(0) 推荐(0)
摘要:恩,这题做的郁闷,其实就是一道素数筛选加上大数拆分的题,但做的我万分无奈,提交几次都是RE,但把几个关键数组开大了,还是不行,看看网上的解题报告思路没错啊,最后的最后终于找出来了,原来是筛选素数的数组开小了,==!以后一定要细心啊!!代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define maxx 1000010//这里开小了~~int p[80000];int a[maxx+10];int num;int s[100];void init(){ int i,j; memset(a 阅读全文
posted @ 2012-04-26 17:12 Misty_1 阅读(154) 评论(0) 推荐(0)
摘要:题目很简单,就是给你一个n*m的矩阵,让你求从左下角到右上角的所有路径,简单的组合数学,直接求C(n+m,m)=C(n+m,n)就可以了,只不过,在数据范围上有些需要注意的,如果直接用int型会数据溢出,所以用long long和double型的。提交的时候,TLE了好几次,不知道哪地方错的,后来又把原代码提交了一遍,竟然A了,而且只用了16ms,不知道是不是poj后台有问题。代码:#include <stdio.h>/*double f(double n,double m){ int i,j,s; if(m>n-m) m=n-m; j=1;s=1; for(i=... 阅读全文
posted @ 2012-04-21 10:03 Misty_1 阅读(149) 评论(0) 推荐(0)
摘要:题目大意是:给你两个数n和m,计算从n到m的所有数的二进制中,0的个数大于1的个数的数的个数。这题用组合数学比较简单,不过要小心,很容易超时的,我就悲哀的RE了两次。对于一个长度为Len的二进制(最高位为1),如何求出他的RoundNumbers呢(假设为用R(len)来表达),分为奇数和偶数两种情况1、奇数情况:在Len=2k+1的情况下,最高位为1,剩下2k位,至少需要k+1为0用C(m,n)表示排列组合数:从m个位置选出n个位置的方法R(len)=C(2k,k+1)+C(2k,k+2)+...+C(2k,2k).由于 A:C(2k,0)+C(2k,1)+...+C(2k,2k)=2^(2 阅读全文
posted @ 2012-04-18 19:29 Misty_1 阅读(229) 评论(0) 推荐(0)
摘要:这题的意思就是要求两点之间是否有整数点,刚开始想用斜率做的,但没想出来怎么做,暴力了一下,没过~~上网看了一下别人的思路,果然。。。。自己还是弱啊~这题的思路是相似三角形,若AC之间有整数点F,则必有AB/BC=AE/EF,即AB与BC必有不小于一的公约数,所以直接转化成求AB、BC是否有不为一的最大公约数的问题了~代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<math.h> 5 int gcd(int a,int b) 6 { 7 if( 阅读全文
posted @ 2011-12-20 11:56 Misty_1 阅读(250) 评论(0) 推荐(0)
摘要:一道简单的大整数加法题,让我做了整整一晚上,无语~~太马虎了,题目中说每个数长度小于等于100,但和不一定小于100啊,唉~·我就在栽在了这上面~~代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<iostream> 5 using namespace std; 6 int main() 7 { 8 int t,i,len,k,a[103],b[103],l,tem; 9 char str[103];10 while(scanf(&q 阅读全文
posted @ 2011-12-02 21:08 Misty_1 阅读(259) 评论(0) 推荐(0)