随笔分类 - 数学_数学知识
摘要:Monthly Expense大意:给你天数N(1 ≤ N ≤ 100,000),和每天需要花的钱(存放在数组中),让你把这些天分成M(1 ≤ M ≤ N)份(每份都是连续的天),要求每份的和最大值尽量小,输出这个和。思路:二分查找。让数组中的最大值为左界,数组的和为右界。左界的含义是将整个数组分成N块,那么和的最大值就是数组元素中的最大值。右界的含义是将整个数组当做一块,那么最大值就是所有数字之和。那么在左右界中(含左右界)的数肯定有一个是解。二分搜索:给定一个初始数mid,从数组首元素开始叠加,超出mid那么分组数i加1,那么这么遍历一遍后能得到以mid为解所需的分组数,要是i小于M,说明
阅读全文
摘要:GCC大意:给一个n,一个m,求(0! + 1! + 2! + 3! + 4! + ... + n!)%m 0 m,那么m!+(m+1)!+...+n!这些项都是可以被m整除的,要对m求余,只需要找比m小的阶乘即可,而m的范围为1000000,在O(m)的复杂度下是可以完成的。所以只需判断n是否...
阅读全文
摘要:Paths on a Grid大意:矩形方格,从左下角走到右上角,只能向上或向右,问一共有多少种情况。思路:排列组合,每一个点的不同走法的总数,是由左边的点和下边的点的总数之和,这就很容易联想到排列组合的一个公式:,其中,n为走到这点所总共经过的边数(不分横边竖边),r可以看为已经走过的横边或者竖边。即有n = a + b,r = a 或者 r = b。#include #include #include #include #include #include #include #include #define LL long longusing namespace std;LL C(LL x,
阅读全文
摘要:Number Sequence大意:给一个有规律的序列,给你一个n,求第n位的数字是多少。最开始理解错了,理解成第n个数字是多少了,应该是第n位是多少,WA了好几遍,看了Discuss中第2147483647位答案是2,才知道是怎么回事的= =、思路:数字的位数可以用 log10((double)i) + 1 这个公式求出来,这样逐步求精就可以慢慢地求出结果了。 1 # include 2 # include 3 # include 4 # include 5 # include 6 # include 7 # include 8 # include 9 using names...
阅读全文
摘要:因式分解# include # include # include # include # include # include # include # include using namespace std;int a[100000010];int b[100000010];void run(){ int t, num, q, n; scanf("%d", &n); t = sqrt(n); num = 0; for(int i = 2; i = 1; i--) { num++; a[num] = n/a[i]; } ...
阅读全文
摘要:HDU1071应该是求定积分的 但是还没研究很透怎么用定积分实现 就找了一个公式s = -(y2-y1)/pow(x2-x1, 2)*pow(x3-x2, 3)/6以下是Discuss中的详细分析:设直线方程:y=kx+t…………………………………………………………(1)抛物线方程:y=ax^2+bx+c……………………………………………………(2)已知抛物线顶点p1(x1,y1),两线交点p2(x2,y2)和p3(x3,y3)斜率k=(y3-y2)/(x3-x2)……………………………………………………(3)把p3点代入(1)式结合(3)式可得:t=y3-(k*x3)又因为p1是抛物线的顶点
阅读全文
摘要:HDU1222思路:思路:m和n如果有公约数,则安全洞存在,无公约数或公约数为1,则无 1 # include 2 typedef long long LL; 3 4 LL gcd(LL m, LL n) 5 { 6 if(m<n) 7 { 8 int t = m; 9 m = n;10 n = t;11 }12 while (n != 0)13 {14 int r = m % n;15 m = n;16 n = r;17 }18 ret...
阅读全文
摘要:在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。φ函数的值 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数(看准是质因数 刚开始以为是因数 怎么算都不对),x是不为0的整数。 1 # include 2 # include //0是朋友 1不是朋友 3 # include 4 5 int a[33000], b[33000]; 6 7 int main(void) 8 { 9 int n, m;10 scanf("%d", &m);11 ...
阅读全文
摘要:一个三角形的时候,再加一个三角形,每一条变会与第一个三角形的两条边相交,这样增加2个小三角形,即两个面。f(2)=3*2+f(1),再加一个三角形,每一条边会与前两个三角形的四条边相交,形成四个小三角形,f(3)=3*4+f(2),依次类推,f(n)=f(n-1)+6*(n-1),化简即f(n)=3*2*(n-1)+f(n-1)。 1 # include 2 # include 3 using namespace std; 4 5 void run1() 6 { 7 int n, m; 8 scanf("%d", &n); 9 while(n--)10 {...
阅读全文
摘要:(1) n条直线最多分平面问题题目大致如:n条直线,最多可以把平面分为多少个区域。析:可能你以前就见过这题目,这充其量是一道初中的思考题。但一个类型的题目还是从简单的入手,才容易发现规律。当有n-1条直线时,平面最多被分成了f(n-1)个区域。则第n条直线要是切成的区域数最多,就必须与每条直线相交且不能有同一交点。 这样就会得到n-1个交点。这些交点将第n条直线分为2条射线和n-2条线断。而每条射线和线断将以有的区域一分为二。这样就多出了2+(n-2)个区域。故:f(n)=f(n-1)+n=f(n-2)+(n-1)+n……=f(1)+1+2+……+n=n(n+1)/2+1 ...
阅读全文
摘要:n!的位数=log10(1)+log10(2)+......+log10(n)取整后加一 1 # include 2 # include 3 4 using namespace std; 5 6 int main(void) 7 { 8 int n, t; 9 cin >> n;10 while(n--)11 {12 cin >> t;13 double sum = 0;14 for(int i = 1; i <= t; i++)15 {16 sum += log10...
阅读全文
摘要:1 struct point{double x, y;}p[105]; 2 3 double xmult(point p1,point p2,point p0) 4 { 5 return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); 6 } 7 8 double area_triangle(point p1,point p2,point p3) 9 {10 return fabs(xmult(p1,p2,p3))/2;11 }12 13 for(int i = 0; i < m; i++)14 {15 ...
阅读全文
摘要:这是我找了好多找到素数筛优化的很不错的了 如果有大神知道还能再优化的话希望能提取宝贵意见 Orz 1 # include 2 # include 3 # include 4 # include 5 # include 6 # include 7 # include 8 # include 9 using namespace std;10 11 int a[1000010];12 13 int main(void)14 {15 int n;16 while(~scanf("%d", &n) && n)17 {18 a[0] = 0, a[1...
阅读全文
摘要:只是简单的求组合数 代码也很简单分子分母约分:(对于数据要求不是很多) 1 int c(int x, int y) 2 { 3 int i, j, sum = 1; 4 if(y > (x/2)) 5 y = x - y; 6 for(i = x, j = 1; i > x-y; i--, j++) 7 { 8 sum *= i; 9 sum /= j;10 }11 12 return sum;13 }View Code 数组模拟:(输入数据很大时不使用 会导致RE) 1 void cc() 2 ...
阅读全文
摘要:整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数n写成如下形式:n=m1+m2+...+mi; (其中mi为正整数,并且1 0),只有一种划分即{1}; (2) 当m=1时,不论n的值为多少,只有一种划分即n个1,{1,1,1,...,1}; (3) 当n=m时,根据划分中是否包含n,可以分为两种情况: (a). 划分中包含n的情况,只有一个即{n}; (b). 划分中不包含n的情况,这时划分中最大的数字也一定比n小,即n的所有(n-1)划分。 因此 f(n,n) =1 + f(n,n-1); (4) 当nm时,根据划分中是否
阅读全文
摘要:数据量很大时 long long中间也会溢出 所以要拆分开来做 1 # include 2 # include 3 # define LL long long 4 5 LL i, len, n, m; 6 LL a[110]; 7 8 void f(int n) 9 {10 for(i = 0; i = 0; i--)18 {19 if(a[i] != 0)20 break;21 }22 len = i+1;23 }24 25 int main(void)26 {27 ...
阅读全文

浙公网安备 33010602011771号