2011年5月22日

HDU 2095 find your present(异或位运算)

摘要: 刚开始做这题时,感觉水题啊,于是直接开了个1000000大小的数组,结果无情的memory limit exceed ,上网查了查大牛们的代码,真是很NB,感觉自己还很弱,还有很长的路要走啊#include<stdio.h>int N;int main(){ while(scanf("%d",&N)) { if(N==0)break; int orignal=0; int num; while(N--) { scanf("%d",&num); orignal=orignal^num;//0与任何数异或都等于他本身 //任何数与 阅读全文

posted @ 2011-05-22 22:22 lonelycatcher 阅读(244) 评论(0) 推荐(0) 编辑

整数划分

摘要: 关于放苹果的那些事。。。。。。。。。。 今天偶然看到一个关于整数划分的算法, 仔细看了后,我想到了放苹果的事,其实这个问题困扰了我很久,一直没想明白放苹果的原理。记得当时做这个题的时候,自己的分析的方法和整数划分的算法是一样的,就是没想到用递归就能做出来,看了一位dn的博客,终于明白是怎么回事了.........例子,整数划分的思想如下:整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。如6的整数划分为 65+14+2,4+1+13+3,3+2+1,3+1+1+12+2+2,2+2+1+1,2+1+1+1+11+1+1+1+1+1 共11种。下面介绍一种通 阅读全文

posted @ 2011-05-22 22:21 lonelycatcher 阅读(410) 评论(0) 推荐(0) 编辑

HDU 1060 Leftmost Digit

摘要: 一看这道题,确实没有思路,数据范围那么大,根本就没法做……后来,看到了一个人的分析,是这样转换的m=n^n;两边同取对数,得到,log10(m)=n*log10(n);再得到,m=10^(n*log10(n));然后,对于10的整数次幂,第一位是1,所以,第一位数取决于n*log10(n)的小数部分总之,log很强大啊,在求一个数的位数上,在将大整数化成范围内的整数上,在指数问题上#include <iostream>#include<math.h>using namespace std;int T;double a;long long b;double c;long 阅读全文

posted @ 2011-05-22 22:19 lonelycatcher 阅读(265) 评论(0) 推荐(0) 编辑

HDU 1066阶乘最后一个非零位

摘要: 转帖:http://blog.csdn.net/anchor89/archive/2010/09/29/5913246.aspx最开始的思路很简单,设一个循环变量从1-n,依次乘到累乘变量s中,只保留s的最后几位非零数字,结果hll的错了,原因主要有两个:1是速度慢,2是在乘的过程中会碰到5的倍数,而每乘一个5的倍数,末尾就会产生一个零,为了保持最后几位都是非零数字,就需要整体右移,这样一来最高位的数字就变得不精确,经过多次右移后,s就完全不是精确的结果了,当然没法得到答案. 这个思路被断掉后一时没了想法,最后多亏老马的提示:末尾0产生的原因是乘式中有2*5这样的因子,因此在计算的时候就该先将 阅读全文

posted @ 2011-05-22 22:16 lonelycatcher 阅读(3841) 评论(0) 推荐(2) 编辑

HDU 1058 humble numbers

摘要: 本题思路很简单:就是用2,3,5,7循环来求第i个hum[i],第i个hum[i]必定等于前i-1个数中其中一个数与{2,3,5,7}中其中一个的乘积,于是答案就出来了~~#include<iostream>using namespace std;long long humble[5843];int prime[4]={2,3,5,7};int N;int main(){ int i,j,k; humble[0]=1; humble[1]=1; //humble[1]=1; for(i=2;i<=5842;i++) { humble[i]=3000000000; for(j= 阅读全文

posted @ 2011-05-22 22:14 lonelycatcher 阅读(731) 评论(0) 推荐(0) 编辑

导航