|
摘要:http://202.120.80.191/problem.php?problemid=1040裸题Description应用高斯消元法求解n*n的线性方程组Ax=b,其中A为系数矩阵。数据保证有唯一解。Input第1行为一个整数n(0#include#includeusing namespace std;#define eps 1e-8 #define zero(a) fabs(a)=1;i--){ for(j=n;j>i;j--){ map[i][n+1]-=map[i][j]*ret[j]; } ret[i]=map[i]...
阅读全文
摘要:给予N*2个数字,改变其中的N个向上进位,N个向下进位,使最后得到得数与原来数的差的绝对值最小考虑小数点后面的数字,如果这些数都非零,则就是 abs(原数小数部分相加-1*n), 多一个0 则 min(abs(原数小数部分相加-1*n) ,abs(原数小数部分相加-1*(n-1)) )以此类推#includeint abs(int a){ if(a<0)return -a; else return a;}int Min(int a,int b){ if(a<b)return a; else return b;}int main(){ int n,i; whi...
阅读全文
摘要:http://ac.jobdu.com/problem.php?cid=1039&pid=19在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。先离散化在统计后面比前面大的有几个保存到all逆序对队 n*(n-1)/2-all 注意long longView Code #include<cstdio>#include<iostream>#include<algorithm>using namespace std;long long N;long long tree[200009
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3826判断一个数的约数是否开根号为一个整数,存在输出no,否则yes先1-1000,000之间的素数去试除该数,同一个素数有两次以上将其整除的话,是no,结束没结束,将余数开根号,看是否是一个整数,是no,否则yesView Code #include<stdio.h>#include<math.h>#include<string.h>int ha[1000005],shu[1000005];int main(){ int t,i,j,k; memset(shu,1,siz
阅读全文
摘要:N个石子,A和B轮流取,A先。每个人每次最少取一个,最多不超过上一个人的个数的2倍。取到最后一个石子的人胜出,如果A要有必胜策略,第一次他至少要取多少个。找规律发现是一个Fibnaci数列,变下型就AC了View Code #include<stdio.h>long long a[1009];int main(){ long long n,i; while(scanf("%lld",&n)!=EOF) { a[0]=0;a[1]=1; if(n==1){ printf("1\n");continue; } ...
阅读全文
摘要:首先找规律知道|s(47)-s(74)|<=1|s(47)-s(74)|==0 47474……4或 74747……7|s(47)-s(74)|==1会是4747……47或是7474……74最终由是s(4),s(7)决定View Code #include<stdio.h>#include<math.h>int main(){ int a,b,c,d; while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF) { int i,j; if(abs(c-d)>1) { printf(&q
阅读全文
摘要:http://blog.csdn.net/swm8023/article/details/6525980比较好的资料求C(10,3,107)第一步: 10/3第二步: *9/2第三步:*8/1如第一步里会出现除不下时的情况,用中国剩余定理做View Code #include<stdio.h>long long min(long long a,long long b){ if(a>b)return b; else return a;}long long ext_gcd(long long a,long long b,long long &x,long long &am
阅读全文
摘要:规定内存限制为3mb在一个数列里n个数,输出不为m个数字的那个数5 32 2 3 3 3 输出39 21 1 3 2 2 3 3 4 4 输出39 41 2 2 1 2 1 2 3 1 输出3开a[64]的数组记录二进制转化好的数最后对该数组取余%m在对应的/(n%m)数组转化为数字即可View Code #include<stdio.h>#include<string.h>int a[64]; int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int i,temp,add;
阅读全文
摘要:计算组合数什么的用到母函数(1+x^1+...x^N1)*(1+x^1+...x^N2)...*(1+x^1+...x^Nn)View Code #include<stdio.h>#include<string.h>int n,m,a,b;int c1[10090],c2[10090];int s[1009];int main(){ while(scanf("%d%d%d%d",&m,&n,&a,&b)!=EOF) { int i,j,k,temp; memset(s,0,sizeof(s)); for(i=0;i&l
阅读全文
摘要:http://www.rqnoj.cn/Problem_607.html完整的结题报告:首先我们需要知道一个知识,对于坐标系第一象限任意的整点(即横纵坐标均为整数的点)p(n,m),其与原点o(0,0)的连线上除过原点整点的个数为gcd(n,m)。其他象限上个数则为gcd(abs(n),abs(m)),这里的gcd(a,b)是指a与b的最大公约数(GreastestCommonDivisor),abs(a)是指数a的绝对值。证明:考虑在op上最小的一个整点(x,y),这里的最小是指横纵坐标绝对值最小,x与y必然满足gcd(x,y)=1,即x与y互质。因为若不互质的话,将x与y均除去他们的公约数
阅读全文
摘要:对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数1,2,4,6等都是反质数。现在给定一个数N,你能求出不超过N的最大的反质数么?先百度知道反素数性质性质一:一个反素数的质因子必然是从2开始连续的质数.因为最多只需要10个素数构造:2,3,5,7,11,13,17,19,23,29性质二:p=2^t1*3^t2*5^t3*7^t4.....必然t1>=t2>=t3>=....搜索。。。View Code #include<stdio.h>#i
阅读全文
摘要:n 为环的大小 ,m 为每隔m,kill一个人View Code #include<stdio.h>#include<string.h>int a[109];int main(){ int i,j,n,count,m; while(scanf("%d %d",&n,&m)!=EOF) { memset(a,0,sizeof(a)); int add=0; i=0,count=1; while(add<n-1) { while(a[i]!=0) ...
阅读全文
摘要:View Code #include<stdio.h>#include<math.h>long long mon(long long n,long long p,long long m){ n=n%m; long long all=1; while(p>0) { if(p&1==1) { all=(all*n)%m; } n=(n*n)%m; p>>=1; } return all;}int main(){ long long n,m; while(sca...
阅读全文
摘要:C(N,K),n,k很大判断C(N,K) 是否是奇数还是偶数if(N&K==K)就是奇数
阅读全文
摘要:排列组合的公式推出来比较简单剩下(x/y)%MOD=z 求z比较麻烦先temp=x%MOD再循环i=0->N直到: (temp+i*MOD)%y==0 z=(temp+i*MOD)/yView Code #include<stdio.h>#include<iostream>#include<algorithm>using namespace std;const long long MOD=1000000007;struct data{ int no; char s;}node[109];long long Mon(long long n,long lo
阅读全文
摘要:死亡游戏,问一把左轮枪,左轮有N个空间,其中用k发子弹,有p个问题,问抢第a[i]个空间有木有子弹,小明为了使自己被秒的概率最小,如何摆放子弹(游戏会一直继续知道有人挂掉),答案要按字典序显示。。。 分类思想吧 7 0 7(为了方便1-7顺序) 。。。。。。。 7 1 7 。。。。。。X 7 2 7 。。。。。XX 7 3 7 。。。X。XX 7 4 7 。X。X。XX ... 8 0 8 不写了,把情况都列一下,总结规律View Code #include<stdio.h>int main(){ __int64 n,k,p; int i; scanf("%I64d%I6
阅读全文
摘要:暴力枚举下,可以发现规律View Code #include<stdio.h>long long a[1000009];int main(){ a[1]=1; int n,i,id=1; while(scanf("%d",&n)!=EOF) { id=1; for(i=2;i<=n;i+=2) { a[i]=a[i+1]=(a[i-1]+a[id])%1000000000; id++; } printf("%lld\n",a[n]); } return 0;}
阅读全文
摘要://有N个数,对于任一个数来说,其它的数有多少个是它的约数可以先把数存储在struct data{ int v;//该数字出现的次数 int add;//该数字的约数总数}node[1000009];枚举 存在的node[],在此基础上更新它的公倍数即可。。。View Code
阅读全文
摘要:暴力也可过,不过太没意思先排序:如41 3 5 8(3-1)*(1*3)+(5-3)*(2*2)+(8-5)*(3*1)规律发现了吧。。。View Code #include<stdio.h>#include<iostream>#include<algorithm>using namespace std;int a[10009];int main(){ int n; while(scanf("%d",&n)!=EOF) { int i,j; for(i=0;i<n;i++) { scanf("%d",&a
阅读全文
摘要:题意:1,2,3,4,5。。。加上加减号使数字和为N,数字越少越好View Code #include<stdio.h>int main(){ int n; scanf("%d",&n); if(n==0) { printf("0\n"); return 0; } if(n<0)n=-n; int i; for(i=1;i<99999;i++) { __int64 all=(i+1)*i/2; if(all==n) { printf("%d\n",i); break; } else if(all>
阅读全文
|