上一页 1 ··· 6 7 8 9 10 11 12 13 14 下一页
摘要: string high_add(string str1, string str2) //传入两个加数,返回结果{ int len1 = str1.size () ; int len2 = str2.size () ; while(len1 < len2) { str1 = '0'+ str1 ; len1 ++ ; } while(len2 < len1) { str2 = '0' + str2 ; len2 ++; } str1 = '0' + str1 ; str2 = '0... 阅读全文
posted @ 2013-04-29 15:18 小仪在努力~ 阅读(138) 评论(0) 推荐(0) 编辑
摘要: #include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<queue>#include<string>using namespace std;#define LL long longbool vis[1005][1005];int go[3][2]= {{1,1},{-1,1},{0,1}};int n,L[1005],R[1005];struct point{ int x,y,st 阅读全文
posted @ 2013-04-28 22:28 小仪在努力~ 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。以下称第x个全排列是都是指由小到大的顺序。康托展开求的是比该全排列小的数有多少个。例如,3 5 7 4 1 2 9 6 8 展开为 98884。因为X=2*8!+3*7!+4*6!+2*5!+0*4!+0*3!+2*2!+0*1!+0*0!=98884.解释:排列的第一位是3,比3小的数有两个,以这样的数开始的排列有8!个,因此第一项为2*8!排列的第二位是5,比5小的数有1、2、3、4,由于3已经出现,因此共有3个比5小的数,这样的排列有7!个,因此 阅读全文
posted @ 2013-04-28 18:33 小仪在努力~ 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 在小媛师姐的“继续”施压之下~我终于花了几十分钟把公式推导出来了,这感觉不是一般爽有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一个,第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此,到第m天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个? (m<29)逆推法:第M天吃完桃子后就剩下1个桃子了,猴子吃了3个:Sum_n等于第n天总的桃子数,eat_n等于第n天吃了的桃子数,res_n等于第n天剩下的桃子数(Sum_n+2)/2=eat_n;Sum_(n-1)=res_n=(Sum_n-2)/2((Sum_n-2)/2+2)/2=eat_(n-1)(Sum_n+2)/4=eat 阅读全文
posted @ 2013-04-28 12:33 小仪在努力~ 阅读(138) 评论(0) 推荐(0) 编辑
摘要: LL ksm(LL a,LL b) //b为幂{ LL tmp=1; for(;b;a=a*a,b>>=1) { if(b&1) tmp*=a; } return tmp;}乘法次数为:b的二进制长度-2+1的个数 阅读全文
posted @ 2013-04-27 21:14 小仪在努力~ 阅读(116) 评论(0) 推荐(0) 编辑
摘要: int anr(int n,int r) { //求n的r排列 int res=1; for(int i=0;i<r;i++) res*= n-i; return res;}int cnr(int n,int r) { //求n的r组合 int res = anr(n,r); for(;r;r--) res /= r; return res;}//{1,2,3,--,n}的r组合a[i](i=1 to r)在其所有r组合中的字典序号int c_lexorder(int *a,int n,int r) { int res = cnr(n,r); f... 阅读全文
posted @ 2013-04-27 17:58 小仪在努力~ 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 区间选点中的区间完全覆盖问题;求解思路如下。1:先根据给出的点的坐标和半径取出其能覆盖的线段范围;假如区间长度8,可选的覆盖线段[2,6],[1,4],[3,6],[3,7],[6,8],[2,4],[3,5]2将每一个区间按照左端点递增顺序排列,拍完序后为[1,4],[2,4],[2,6],[3,5],[3,6],[3,7],[6,8]3设置一个变量表示已经覆盖到的区域。再剩下的线段中找出所有左端点小于等于当前已经覆盖到的区域的右端点的线段中,右端点最大的线段在加入,直到已经覆盖全部的区域4过程:假设第一步加入[1,4],那么下一步能够选择的有[2,6],[3,5],[3,6],[3,7], 阅读全文
posted @ 2013-04-26 17:58 小仪在努力~ 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 此题意思给定点集S={(xi,yi)i=1.2.3...n},求用圆心在x轴上,半径为d的圆覆盖S所需的圆的最少个数。1.先把给出的岛的坐标(xi.yi)和半径r转化为在x轴上的区间,即当d-yi>=0时,圆心位于x轴上的区间为Ii=[ xi-sqrt(d^2-yi^2) , xi + sqrt( d^2 - yi^2 )],则转化为区间选点问题。2.S中点(xi,yi),对应一个在x轴上的区间Ii=(li,ri),按照区间右端点ri从小到大排序,在区间集合中选择一个索引最小的区间,把选择的区间和与其相交的所有区间作为一组从T中删除,直到T为空集,此时搜到的组数最大#include< 阅读全文
posted @ 2013-04-26 14:14 小仪在努力~ 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 最后是用了最大覆盖方法做的,不会超时,前面注释部分贪心策略估计也许应该错了,求大神帮忙指出 #include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;/*struct point{ int x,y;}p[220];bool cmp(point a,point b){ if(a.y==b.y) return a.x>b.x; return 阅读全文
posted @ 2013-04-26 10:04 小仪在努力~ 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 很裸的贪心:按价值从大到小sort一下,然后枚举当前最大价值最多往包里放多少(更新m),累加起来就是结果#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;struct point{ int v,w;}p[15];bool cmp(point a,point b){ return a.v>b.v;}int main(){ int 阅读全文
posted @ 2013-04-26 09:55 小仪在努力~ 阅读(268) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 14 下一页