
数学题-技巧-思维
秋天的风--
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
展开
-
hdu 3064
1:前n项和公式:1+2+3+...+n = n*(n+1)/22:前n项平方和公式:1^2+2^2+.........+n^2=n*(n+1)*(2n+1)/6#include#includeint main() {__int64 t,x,y;__int64 ans,sum;double a,b;while(scanf("%I64d",&t)!=EOF) {原创 2014-03-17 21:10:14 · 663 阅读 · 0 评论 -
hdu 1163
别人的代码开始自己不知道什么数论解法: ab*ab=(a*10+b)(a*10+b)=a^2*100+2ab*10+b^2 所以the root digital=(a+b)*(a+b); 而数论中的定理:两数之积对9取余数等于两数对9的余数的乘积。 代码: #include"stdio.h"int main()原创 2014-05-20 09:46:27 · 597 阅读 · 0 评论 -
hdu 1868 水
#includeint main() { int n,m,i,j,k; while(scanf("%d",&n)!=EOF) { k=2; j=0; for(i=2;;i++) { if((2*n+i-i*i)/(2*i)<=0) break; if((2*n+i-i*i)%(2*i)==0)原创 2014-05-23 09:39:44 · 616 阅读 · 0 评论 -
hdu 1568关于斐波那契数列的公式及其思维技巧
先看对数的性质,loga(b^c)=c*loga(b),loga(b*c)=loga(b)+loga(c);假设给出一个数10234432,那么log10(10234432)=log10(1.0234432*10^7)=log10(1.0234432)+7;log10(1.0234432)就是log10(10234432)的小数部分.log10(1.0234432)=0.01006374转载 2014-07-05 09:10:13 · 691 阅读 · 0 评论 -
hdu 4927 java程序
/*对于本题题意很简单关键在于求杨辉三角时的二项式是没有用到优化,导致超时。对于第n行的二项式的第i个可有第i-1个乘于一个数处于一个数得到,。假如n=6,i=4;C(n,i)=C(n,i-1)*(n-i+1)/i;*/import java.io.*;import java.math.*;import java.util.*;import java.text.*;public原创 2014-08-09 17:32:12 · 705 阅读 · 0 评论 -
hdu 4950
#includeint main(){ __int64 h,a,b,k,j=0; while(scanf("%I64d%I64d%I64d%I64d",&h,&a,&b,&k),h||a||b||k) { printf("Case #%I64d: ",++j); if(h<a+1) { printf("YES\n");原创 2014-08-14 18:26:49 · 657 阅读 · 0 评论 -
sdibt 1251 进化树问题
/*三个点的话 A--D--B | C dis(AD)=(AB+AC-BC)/2;拓展到到n个点 每次去叶子节点,先去掉与A相连长度最小的。 将他们的长度加起来。*/#include#define N 110int ma[N][N];int main() { int n,m原创 2014-09-26 11:11:46 · 602 阅读 · 0 评论 -
hdu 5050 java程序求大数最大公约数
import java.io.*;import java.math.*;import java.util.*;import java.text.*;public class Main{ public static void main(String[] args) { int e=0,i,j; BigInteger f,ff,p,h,原创 2014-09-27 19:54:13 · 629 阅读 · 0 评论 -
hdu 2014 位运算
/*注意两点1.从后往前找互补的,刚开始我找的是相邻的但是这个例子就不行101 1102.因为时累加所以sum可能会超出int范围,这个很重要。*/#include#define N 110000#includeint a[N];int b[N];int vis[N];int power(int u) { int k=0; while(u) { u/=2;原创 2014-09-25 14:00:33 · 630 阅读 · 0 评论 -
hdu 4431 绝对值之和最小公式
/*普通的二分不好写,反正我没写出来,这题核心需要求出绝对值最小公式sum=|x+10|+|x+5|+|x+1|+|x-2|+|x-6|;sumx[1]=-10;sumx[2]=-15;sumx[3]=-16;sumx[4]=-14;sumx[5]=-8; 对于第3个点sum=(-1)*3-sumx[3]+sum[5]-sum[3]-(-1)*(5-3);按照这样就可以直接得到一个点的原创 2014-11-01 14:30:31 · 662 阅读 · 0 评论 -
hdu 4091 数学思维题贪心
/*参看博客地址:http://blog.youkuaiyun.com/oceanlight/article/details/7857713重点是取完最优的后剩余的rest=n%lcm+lcm;中性价比小的数目num<lcm/性价比小的体积,因为如果大于的话肯定可以由性价比好的替换。然后枚举。从体积大的开始枚举次数少。注意64位*/#include#include#include#defi原创 2014-11-03 16:56:59 · 578 阅读 · 0 评论 -
hdu 1703
#include#define N 11000int a[N];int main() { int i,n; a[1]=0;a[2]=5;a[3]=15;a[4]=20; a[5]=30; for(i=6;i a[i]=a[i-1]+10; while(scanf("%d",&n),n) { pri原创 2014-05-17 09:55:54 · 644 阅读 · 0 评论 -
背包again
[提交][状态][讨论版]题目描述Gy最近学习了01背包问题,无聊的他又想到了一个新的问题,给定n个物品的价值,和01背包一样,每个物品只能选1次或0次,求最小不能被得到的价值。输入第一行一个正整数T(T ,表示有T组数据。每组数据输入格式如下:第一行为一个正整数N(N,表示物品个数。第二行N个正整数,表示每个物品的价值vi(1原创 2014-04-22 16:13:56 · 597 阅读 · 0 评论 -
hdu 1575 矩阵快速幂
#include#include#define N 100int map[N][N];int power(int n,int c) { int sum[N][N],i,j,k,mapan[N][N]; for(i=1;i for(j=1;jsum[i][j]=map[i][j]; c--; while(c) { if(原创 2014-03-18 10:41:08 · 479 阅读 · 0 评论 -
foj 2173 floyd+矩阵快速幂
FOJ 2173 Nostop 从1点到n点恰好走了k次的最短路题目链接:http://acm.fzu.edu.cn/problem.php?pid=2173思路:类似于传递闭包的性质用矩阵mp[i][j] 表示i点到j点 走1次的最短路--------------若我们用 mp[i][j] 表示从i点到j点 走了k次的最短路距离转载 2014-04-30 10:33:14 · 689 阅读 · 0 评论 -
fzu 2173 floyd+矩阵快速幂
#include#define inf 1000000000000000#define N 100long long tmp[N][N],ma[N][N];int n;long long min(long long a,long long b){ return a}void floy(long long a[N][N]){ int i,j,原创 2014-04-30 12:17:19 · 634 阅读 · 0 评论 -
hdu 1220组合数学
两个立方体相交的点数有0 1 2 4不考虑相交点数的话有C(n,2)个立方对。而求不超过两个交点的对数,即为用总的减去有四个交点的对数,而四个交点即为同面四个交点的对数为相同的面的个数为(所有的小立方体 的所有面(6*n*n*n)-外面的6个大面(6*n*n))/2所以得到n*n*n*(n*n*n-1)/2-(6*n*n*n-6*n*n)/2#includeint ma原创 2014-03-20 15:16:02 · 463 阅读 · 0 评论 -
fzu 2138
//假设n个人每个人做对两道题#includeint main() { int t,n,m,i,sum; scanf("%d",&t); while(t--) { scanf("%d",&n); sum=0; for(i=1;i scanf("%d",&m); sum+=m;原创 2014-05-05 15:38:40 · 489 阅读 · 0 评论 -
fzu 2132
#includedouble h;double tt;void s(long long m,long long n) { long long i,j,sum; j=1; sum=1; for(i=n;i>=n-m+1;i--,j++) { sum*=i; sum/=j; } h=h*1.0*sum; return ;}int main(){原创 2014-05-05 15:57:43 · 499 阅读 · 0 评论 -
csu1395模拟
#include#include#define N 10char s[N][N][N]={{"***","* *","* *","* *","***"},{" *"," *"," *"," *"," *"},{"***"," *","***","* ","***"},{"***"," *","***"," *","***"},{"* *","* *","***","原创 2014-05-06 15:57:37 · 448 阅读 · 0 评论 -
fzu 2136
#include#define inf 1000000000#define N 110000int a[N];struct node {int start,end;}b[N];int minn[N];int main() { int n,t,i,j,len; scanf("%d",&t); while(t--){ scanf("%d原创 2014-05-06 16:43:20 · 520 阅读 · 0 评论 -
foj 2139
#include#includeint a[10];int cmp(const void *a,const void *b) {return *(int *)a-*(int *)b;}int main() { int n,m,i,t; scanf("%d",&t); while(t--) { scanf("%d",&n); for原创 2014-05-07 22:57:47 · 460 阅读 · 0 评论 -
foj 2139
hi.baidu.com/ydlqw/item/120cd21a5afd5becddeeca41?qq-pf-to=pcqq.c2c转载 2014-05-07 22:59:03 · 492 阅读 · 0 评论 -
hdu 4790 数学
/*题意:给你二个区间[a,b]和[c,d]分别从中选一个数x和y使的(x+y)%p=m;可以这样来求,先求出(0->b和0->d区间段的值)-(区间0->a-1和0->d的值)-(区间0->b和0->c-1的值)+(0->a-1和0->c-1)的值而且发现有这样的规律对于连个区间的末端值a和b来说当在0->a这个区间内有一个单调性,a->b-1这个区间内有单调性,b-(a+b-m)/p原创 2014-11-07 18:05:56 · 924 阅读 · 0 评论