摘要: 求阶乘的最后一位非零整数。开始天真无鞋,以为只取最后非零位累成即可.然后自然出错官方解释,可能存在xx12*xxx5,如果只取最后非零位累乘...2*5=10 mode 10 ==1 ,这样两个数十位上的就被忽略了...大概是这个意思。然后解题思路是,10全部是由2*5产生的,即使是10本身也是2*5,所以只要去掉累乘中的所有2,5对就好了而2出现的概率远大于5,用数组arry[n]保存1到n,然后每个数mod5 直到因子5全部被剔除 ,同时记录剔除的个数m,然后再对更新后的arry[n]剔除m个2(记住除多除少了)这样就不会产生10了.在取最后一位累乘即可. 看似简单,本菜真想不出来了 1 阅读全文
posted @ 2013-09-28 22:16 cavehubiao 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 看编程之美上这题,感觉状态方程写的好别扭,我感觉应该是用一个数组s[i]表示用到ary[i]时最大数组和所以s[i]=max(s[i-1]+ary[i],ary[i]) 意为:要得到,用到ary[i](表示必须包含ary[i])构成的最大数组和,要么是用了包括ary[i-1]的最大数组和s[i-1]要么完全没用到s[i-1],即直接是ary[i]。、但是这最后的s[lengt-1]只是一个必须用到ary[i]的最大数组和,有可能是不是最大的,所有还需要一个变量gmax,gmax=(gmax,s[i])应为最大子数组肯定出现在数组s[i] i=0-n-1内某个位置#includeusing na 阅读全文
posted @ 2013-09-28 13:06 cavehubiao 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 技术题竟然没做完啊,我真是擦蛋了。case好久没用了,我忘记了如果不加break要不要再根据case m判断...这真是完蛋...然后一个质因数分解,这个我真没想过怎么做,随便copy了个...然后倒数第二题约瑟夫环,这东西还是大一c++时的题目,好久没做了,写了个发现在vs2012上跑了下,总是结果输出后显示在已损坏了程序内部状态的 xxx.exe 中发生了缓冲区溢出。按“中断”以调试程序,我tm调了半天没发现什么问题,最后想着反正结果出来了,代码贴上去再说...结果一个提示,超时答案已提交.这tm我最后一题都还没看到啊...然后我把这该死的代码用vs2008跑了下,没问题啊...真不知道咋 阅读全文
posted @ 2013-09-28 11:48 cavehubiao 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 以前遇到dp,直接看题解然后再花一下午看懂(虽然还是似懂非懂)今天遇到dp,依旧是直接看状态转移方程..但好歹自己能写出来了... 1 /* 2 3 ID: hubiao cave 4 5 PROG: stamps 6 7 LANG: C++ 8 9 */10 11 12 13 14 #include15 16 #include17 18 #include19 #include20 21 using namespace std;22 23 24 25 int K,N;26 int mins[200*10000+1];27 int stamp[52];28 int main()29 30... 阅读全文
posted @ 2013-09-27 23:00 cavehubiao 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 看到的貌似是阿里的笔试题,题意是一组数,要找到min和max,同时要求时间复杂度(比较次数)小于2n(2n的办法都想得到)。别人的思路:n个数的数组里看作每两个一组,若n是奇数,最后个单独看。然后遍历一次,找出每组数里的tmax和tmin,tmax存到一个数组,tmin存到一个数组,此时比较次数为n/2;可知最大数在max数组里,最小数在min数组里,再用普通线性比较分别遍历两个数组 找到max数组里的最大,min数组里的最小即可比较次数为n/2,n/2总共为n/2+n/2+n/2=3n/2;再对max和min数组用同样办法和直接求无差别。ps:空间上还可以继续优化下,维护两个gmax,gmi 阅读全文
posted @ 2013-09-27 18:54 cavehubiao 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 一个个来,首先staticstatic成员变量只能类外初始化 type classname::var(=x);static函数可以类里定义也可类外...而貌似static 非成员函数的static只表示该函数仅该文件可见...关于引用引用要绑定实体,这个实体是 int &ra=func(); 语句等号右边的值,即函数func()的返回值(也是一个引用,而这个引用每次调用时在return 语句中被初始化为静态变量a),所以,ra的实体是a。代码:程序代码:#include using namespace std;int & func(){static int a; //静态局部变 阅读全文
posted @ 2013-09-26 16:52 cavehubiao 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 这题好烦了,看着蛮简单,开始用map存,最后排序要用到value值,但map的compare只传key...换成set >勉强能跑但是好慢,后来看题解最后直接把map里的传到vector>再排序,我怎么就没想到多用个容器...不想写了贴个别人的过了先,不过有点注意,算起点时我这么些j=0;jstr.length()时,循环应该自动退出.结果却不是.后来看提示才明白,str.length()返回的是unsigned int,我的A是int而当unsigned int和int运算时,结果作为unsiged...那自然是j一直小于...然后又是vector不能用于copy... 1 /* 阅读全文
posted @ 2013-09-26 16:07 cavehubiao 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 这题不会,直接的看的题解,方法很多,不过感觉都没见过啊,选了第一个漂浮法看了好久才搞懂漂浮法以逆序来进行放置,即n to 1。逆序的好处在于放置一个矩形后,俯视看到的就是最终俯视该矩形应该看到的。因为挡着它的矩形在之前已经放置好了,所以可直接统计,为递归创造了条件。每放一个矩形,可以想象成将其扔入一密度很大的海水底部,海分成了n层,然后矩形开始向上浮。在上浮过程中若碰撞到其他的矩形则断裂成几个小矩形,继续上浮,直到浮出水面。于是想到用个递归来模拟上浮过程。 解释下,就是倒过来放,先放最上面一个,因为水面无拦截的矩形,直接飘到水面,被看到全部-----对应最后画的矩形肯定没有被覆盖然后是倒数第二 阅读全文
posted @ 2013-09-25 19:21 cavehubiao 阅读(507) 评论(0) 推荐(0) 编辑
摘要: ...目测我自己写坑定超时,就去NOCOW看了下,题解,官方是每个质数与已有的humble想乘取大于最大humble的最小数即是新的最大humble,然后我就写了个个,开始嫌麻烦用set存,超时的飞起。然后全部改成数组,结果case 6还是超时,想了半天感觉和别人的题解也没啥差别,为什么运行时间差这么多后来试着把69行的循环初始条件改成i=0,改成i=1,瞬间过了....后来一想确实i=0 没用啊,而且case 6求第100000个,白白循环100000次.... 1 /* 2 3 ID: hubiao cave 4 5 PROG: humble 6 7 LANG: C++ 8 9 *... 阅读全文
posted @ 2013-09-24 23:15 cavehubiao 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 完全背包足以,参照完全背包最优解就过了/*ID: hubiao cavePROG: inflateLANG: C++*/#include#include#include#includeusing namespace std;int main(){ ifstream fin("inflate.in"); ofstream fout("inflate.out"); int f[10003]; int w[10003]; int v[10003]; int num,minute; fin>>minute>>num; for(int i= 阅读全文
posted @ 2013-09-23 13:31 cavehubiao 阅读(125) 评论(0) 推荐(1) 编辑