AC
文章平均质量分 63
pennyshe
这个作者很懒,什么都没留下…
展开
-
hdoj 1258 Sum It Up (递归回溯)
题目大意:给定由n(1思路:深搜递归回溯.按序列的非升序去重复. #include using namespace std;int num[13],t[13];int n,m,tot,len,flag;void find(int start,int sum){ int i; if(sum==tot){ flag=1; for原创 2011-02-19 23:59:00 · 814 阅读 · 1 评论 -
hdoj 1231(最大连续子序列)
<br />题目大意:在一序列求最大连续子序列。输出最大连续子序列的和与其第一个数与最后一个数。若和为负数,输出0,与原序列的第一个数和最后一个数。<br /> <br />思路:<br />(1) b[] 保存以a[i]为结尾的最大子序列的第一个数。<br />a[i]=max(a[i-1]+a[i], a[i]);<br /> <br />#include <iostream>using namespace std;int main(){ int n,i; int原创 2010-06-19 22:51:00 · 708 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers (线段树)
题目大意:给一序列,对子序列的每个数进行增量,查询某子序列的和。思路:建立一线段树,节点保存区间左右端点,区间插入的和,区间的增量(必须满足区间吻合),左右孩子。增量的时候注意在往下一个节点查找的同时,必须把增量累加到大的区间里,直到查找到区间吻合的。nInc 必须用64位整型,否则WA。查询的时候把nInc往下带1600+ms,不往下带1500+ms,竟然时间更短。······#include using namespace std ;struct Node{ int L,R; Nod原创 2010-08-11 18:13:00 · 437 阅读 · 0 评论 -
POJ 3264 Balanced Lineup(RMQ 线段树)
题目大意:RMQ问题。RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题思路:建立一线段树,每个节点保存区间范围,区间内最值,左右孩子。#include using namespace std;const int MyMin=0x80000000;const int MyMax=0x7fffffff;struct N原创 2010-08-10 16:11:00 · 434 阅读 · 0 评论 -
关于取整 四舍五入
函数名: ceil 功 能: 向上舍入 用 法: double ceil(double x); 包含于头文件:math.h函数名: floor 功 能: 向下舍入 用 法: double floor(double x); 包含于头文件:math.h注意返回值和参数都为double型,且需包含头文件。计算A/B向上取整可以这样算(A+B-1)/B下面的代码输出为2.0 1.21 1可以通过精确位数可以实现四舍五入 而取整并没有四舍五入#include using namespace std;原创 2010-06-14 15:56:00 · 719 阅读 · 0 评论 -
hdoj 1316 How Many Fibs?(大数)
<br />题目大意:给出a ,b(a <= b <= 10^100),求区间[a,b]内含fib数的个数。<br />思路:初始化fib数列至100位(第480个)。从头开始比较 小于a的的个数,从尾开始比较小于等于b的个数,相减即为所求。<br /> <br />需先把a,b化为与数列格式相同的整型。比较的时候先比较长度,长度相同,从最高为开始比较。<br /> <br />#include <iostream>using namespace std;char a[101],b[101];i原创 2010-06-14 13:26:00 · 396 阅读 · 0 评论 -
hdoj 1753 大明A+B (大数)
<br />题目大意:给出不超过400位的正小数a和b,求a+b。<br />思路:分整数部分与小数部分分别做加法。注意小数部分到整数部分的进位。<br /> i,j保存小数点位置或整数长度。需判断是否为纯整数。<br /> 注意最简形式最多只能简至小数点<br /> <br />#include <iostream>using namespace std;char a[401],b[401];char ans[801];int main(){原创 2010-06-14 10:12:00 · 975 阅读 · 0 评论 -
a^b%c(蒙格马利快速幂模算法)
<br /> 蒙格马利快速幂模算法:<br /> 将p按二进制写出来,应该很容易理解。r依次是1,2,4,8,16,32,……次幂的结果。当所在二进制的位为1时,k乘上r。最后返回k。<br /> 由x*y%z=(x%z)*y%z ,运算过程不停模m。<br /> <br />a^p%m:<br />typedef __int64 BIGINT;BIGINT Montgomery(BIGINT a, BIGINT p, BIGINT m){ BIGINT r = a % m;原创 2010-06-02 17:29:00 · 3807 阅读 · 1 评论 -
又见素数(素数筛法)
又见素数Time Limit:2000MS Memory Limit:65536KTotal Submit:287 Accepted:24 Description 给定一个正整数n(n <= 10000000),求n(包含)以内素数的个数。Input 第一行为一个整数t(t <= 1000),表示测试数据的组数。 接下来有t行,每行一个整数n。O原创 2010-05-29 13:05:00 · 1069 阅读 · 0 评论 -
判断是否为平方数
1+3+5+7+9+…… bool square(int n){ int i=1; while(n>0) { n-=i; i+=2; } if(n==0) return 1; else return 0;}原创 2010-05-30 23:13:00 · 798 阅读 · 0 评论 -
hdoj 1500 Chopsticks(DP)
题目大意:给出n支筷子的长度,从中选出k+8个组合的筷子,每个组合由三支筷子组成,每个组合的badness=次小筷子和最小筷子的差的平方,要求使总的badness最小。思路:a[]保存筷子的长度并从大到小排。b[i][j]保存前j支筷子取i对筷子的最小badness。按i从1到k循环b[i][j] 每次j必须从第i*3个开始,以保证符合i对筷子都有一支最大的条件。(从大到小原创 2010-05-25 18:56:00 · 732 阅读 · 0 评论 -
hdoj 1800 Flying to the Mars (字符串哈希函数)
题目大意:输入N(N思路:对每个level(字符串)进行哈希, 存入哈希表,线性探测再散列解决冲突。附常用字符串哈希函数:int ELFhash(char *key){ unsigned long h = 0; unsigned long g; while( *key ) { h =( h> 24; h &= ~g; } return h;} // RS Hash Functionunsign原创 2010-07-17 18:13:00 · 908 阅读 · 0 评论 -
hdoj 1496 Equations (HASH)
<br />题目大意:方程 a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 <br /> a,b,c,d的范围为[-50,50] , x1,x2,x3,x4的范围为[-100,100].<br /> 现给出a,b,c,d,求x1,x2,x3,x4的解的个数.<br /> <br />思路:先求a*x1^2+b*x2^2 所有的值,保存于哈希表中。再查找-(c*x3^2+d*x4^2)是否保存于哈希表中。<br /> <br />问题是解决哈希表中的冲突<br />原创 2010-07-16 22:46:00 · 937 阅读 · 2 评论 -
hdoj 3405
题目大意:给n个岛的坐标,使其中一个岛不与其它岛相连,其它岛相互可达,求所需修的桥的最短长度。 思路:n个岛遍历任意n-1个岛的最小生成树,找出最小的。 #include #include using namespace std;const int M=52;const double INF=100000;int a[M][2];double d[M原创 2010-05-19 00:32:00 · 490 阅读 · 0 评论 -
POJ 1458 || HDOJ 1159 Common Subsequence (DP)
<br />题目大意:最长公共子序列。<br /> <br />思路:LCS(i,j)定义为 str1 的前i个序列 与 str2 的前j个序列 的最长公共子序列长度。<br /> <br /> LCS(i,j) =LCS(i-1,j-1)+1 (str1 [i] == str2 [j])<br /> =max( LCS(i-1,j) ,LCS(i,j-1) ) (str1 [i] != str2 [j])<br /> <br /原创 2010-08-16 14:52:00 · 578 阅读 · 0 评论 -
POJ 1113 WALL(凸包-计算几何)
<br />题目大意:给出城堡的若干点,要求在其周围建围墙,使距离城堡>=L,并使长度最短。<br />思路:<br />求出若干点的凸包,每个边平行向外延伸L,断开处用圆弧连接,圆弧的端点连接原凸包顶点,则分别与两边垂直,则圆心角与内夹角互补。<br />设凸包为n边形,则凸包内角和为(n-2)*PI ,则凸包外所有圆心角和为n*PI-(n-2)*PI=2*PI,刚好为一半径为L的圆周长。<br /> <br />求凸包时 按y从小到大排 y相同按x从小到大排。<br /> <br />#include原创 2010-08-14 18:51:00 · 493 阅读 · 0 评论 -
hdoj 2154
在论坛上看到别人推出来的,说说我的理解。f[n]=f[n-1]+2*f[n-2]第n项相当于在 n-2 项前加BA 和 CA,在n-1项前加 B 或 C。之间并没有出现重复。 #include using namespace std;int main(){ int a[1001],i,n; a[1]=0; a[2]=2; fo原创 2010-03-07 22:05:00 · 631 阅读 · 2 评论 -
USACO s2.1 Health Holsteins
<br />题目大意:给出牛所需各类维他命的量,和各种稻草所含的各类维他命的量.每种稻草使用一次,求最少组合使用哪几种稻草可满足牛的维他命需求.相同数量按字典序.<br /><br /><br />思路:深搜剪枝.<br />按顺序深搜,则第一个满足的为该层的解.不必再往本层和下一层搜.<br /> <br />/*ID:sheshao1LANG:CTASK:holstein*/#include <stdio.h>int dig[]={1,2,4,8,16,32,64,128,256原创 2011-05-10 22:57:00 · 488 阅读 · 0 评论 -
USACO S1.5 PrimePalindromes
<br />题目大意:给定a,b(5<=a,b<=100,000,000),输出[a,b]区间的回文素数.<br /><br /><br />思路:先找出区间的回文数.因为以偶数或5开头的,或位数为偶数的回文数(除11外)的不是素数.所以查找回文数时剪枝.<br /><br /><br />再对查找的回文数判断是否为素数.可先用筛法筛出sqrt(b)以内素数.<br /> <br />可参考http://www.nocow.cn/index.php/USACO/pprime<br /> <br />/*原创 2011-03-19 18:47:00 · 445 阅读 · 0 评论 -
hdoj 2202 最大三角形 (凸包)
题目大意:给定n(3思路:求凸包,对凸包中任意三个点进行枚举. 其中可利用凸包的特点进行剪枝.另外给出三点坐标,如何求构成的三角形面积.如点(x1,y1),(x2,y2),(x3,y3)则S=|(x1*y2+x2*y3+x3*y1-y1*x2-y2*x3-y3*x1)/2|可画图,面积为两梯形减另外一梯形. #include #include using namespace std;const int Max=50001;struct Point{ int x; in原创 2011-02-19 00:56:00 · 1131 阅读 · 0 评论 -
hdoj 1232+hdoj 1272 (并查集)
<br />//hdoj 1232<br />#include <iostream>using namespace std;int DisjSet[1001];int ans;int Find(int X){ if(DisjSet[X]<0) return X; else return Find(DisjSet[X]);}void SetUnion(int Root1,int Root2){ Root1=Fin原创 2011-02-10 23:21:00 · 645 阅读 · 0 评论 -
USACO s1.4 Packing Rectangles
题目大意:给出4个矩形(1思路:有以上6种情况的堆放方式.再通过排列与旋转枚举所有情况.另外,第4第5种计算的结果相同,所以合并为一种情况.所以总共枚举有4! * 2^4 *5 = 1920.(其中有不少重复的情况,如第1种只需枚举1种排列即可).schema 1 :[ 0123 ]wid=wid0+wid1+wid2+wid3 , ht=max(ht0,ht1,ht2,ht3);schema 2:[ 012 ][ 333 ]wid=max(wid0+wid1+wid2,wid3) , ht=max(ht0原创 2011-02-09 00:42:00 · 589 阅读 · 0 评论 -
USACO S1.4 The Clocks
<br />题目大意:给定9个时钟,9种操作,每种操作是将其对应的时钟旋转90度.求一最小操作序列使所有时钟成0点.<br />思路:每种操作进行4次相当于不操作,所以总共有4^9=262144.使用DFS搜索所有可能.<br /> <br />使用位运算加速:每个钟有四种状态,分别使用三位二进制000,001,010,011表示,转动的时候相当于加1,所以保留第三位用于进位,再用与操作去掉第三位的进位.<br /> <br />数“57521883”用于清除每个时钟状态最高位的一(按位与)。<br />c原创 2011-02-27 19:56:00 · 589 阅读 · 0 评论 -
POJ 3979-3982~
<br />/*<br />睇到学弟们在做~跟麦做~好弱~不过都有D收获~啊holiday好懒呐~<br />*/<br />/*3979*/<br />#include <stdio.h>int gcd(int x,int y){ int r; while((r=x%y)!=0) { x=y; y=r; } return y;}int main(){ int a,b,c,d,sign,e,f原创 2010-11-20 21:28:00 · 1119 阅读 · 1 评论 -
HDOJ 3646 Fate Stay Night (DP)
<br /> <br />设dp[i][j].kill 为前j个double i 次最多kill的个数.<br /> dp[i][j].kill= max{dp[i][j-1].kill +kill1 , dp[i-1][j-1].kill+kill2}<br /> <br />比赛的时候思路有点乱,最终没AC。。。<br />写得有点乱。。。<br /> <br />#include <iostream>using namespace std;struct state{ int ki原创 2010-09-21 13:27:00 · 518 阅读 · 0 评论 -
hdoj 1286 (欧拉函数)
题目大意:赤裸裸的欧拉函数.设φ(m)表示不超过m,而和m互质的正整数的个数,则φ(m)称为欧拉函数.定理1:设p为质数,则我们有1) φ(p) = p - 1 ;2) 若n为正整数,则φ(pn)= pn(1-1/p).证明:1) 由于1,2,…,p-1都与p互质,所以φ(p) = p -1;2) 当 n 是一个正整数,由于(a,pn)=1 (a,p)=1,因此,不超过pn而为p的倍数的的正整数个数为[pn/p] =pn-1.所以不超过pn且与pn互原创 2010-09-17 22:54:00 · 683 阅读 · 0 评论 -
POJ 1061 + POJ 2115 (求模线性方程)
求 a*x=b(mod n). 先转化为求 ax+ny=b.用扩展欧几里德求出 ax+ny=gcd(a,n). 定理:方程ax=b(mod n)对于未知量x有解,当且仅当gcd(a,n)|b.令d=gcd(a,n).设为x' ,y'为所求 满足ax'+ny'=gcd(a,n).则原方程有一解x0=x'+n/d.定理:假设ax=b(mod n) 有解,x0是该方程的任意一个解,则该方程模n恰有d个不同的解,分别为:xi=x0+i*(n/d) (其中i=1,2,...d-1).题目求最小正整数解。定理:(转原创 2010-09-01 20:50:00 · 1285 阅读 · 0 评论 -
hdoj 1428 漫步校园 (搜索)
<br />题目大意:矩阵 从(1,1)走到(n,n)点,规定"从A区域到B区域仅当存在一条从B到机房的路线比任何一条从A到机房的路线更近"。<br />思路: <br />设b[i][j] 为从(i,j)到(n,n)的最小时间。则从(i,j)到(i',j') 仅当 b[i][j]>b[i'][j'].<br /> <br /> <br />#include <iostream>#include <queue>using namespace std;struct TT{ int x原创 2010-09-13 16:49:00 · 671 阅读 · 0 评论 -
HDOJ 3552 I can do it!
题目大意:给定N个元素,每个元素含Ai,Bi两个数。将N个元素分为A,B两类。求max(x∈Set A) {Ax}+max(y∈Set B) {By}.思路:按A从大到小排序。循环中不断更新保证了b记录当前B类中最大的B,则分为两类A:i~N-1 ,B:0~i。不错的算法,学习了。#include using namespace std;struct TT{ int A,B;};TT p[100005];int cmp(const void *a,const void原创 2010-08-18 22:26:00 · 458 阅读 · 0 评论 -
关于负数求余(2个原则)
<br />a%b=c (b!=0)<br /><br /><br />1>余数c的符号同被除数a.<br />2>余数c的绝对值小于除数b,即 |c|<|b|.<br /> <br />如 (-10)%(-20)=-10<br /> (-10)%(20)=-10<br /> (10)%(-20)=10.转载 2010-07-16 21:23:00 · 2394 阅读 · 0 评论 -
hdoj 1010 Tempter of the Bone(深搜剪枝)
<br />题目大意:地图由"S""X""D""."组成,"X":wall ,".":block, 问是否能从S出发在第T秒钟刚好到达D。<br />思路:深搜,注意剪枝。<br /> 剪枝一:block数应该大于等于T,且大于需要走的最少步数。T应该大于等于最少步数。<br /> 剪枝二:奇偶剪枝。<br /> 即把地图看成<br /> 01010101<br /> 10101010<br /> 01010101<br /> 10101001<br />即从1走到1 或从0走到0 需要偶原创 2010-07-16 00:00:00 · 548 阅读 · 0 评论 -
POJ 1118+2606+2780 (求平面上同一条直线的最多点数)
<br />题目大意:给出平面上若干点,求属于同一条的直线的最多点数。<br /> <br />思路:分别求出其中一点与其它点的直线的斜率,进行排序,如果斜率相同则同一条直线。<br /> <br />注意:一开始写的时候分别把所有点与其他所有点的斜率都算了,结果超时。其实只要算与后面的所有点的斜率即可。(因为两点决定一直线,前面的两点决定的直线已经算过。)<br /> <br />很好的思想,又学习了。下面是2780的代码:<br /> <br />#include <iostream>using n原创 2010-07-13 01:47:00 · 2867 阅读 · 2 评论 -
Rabbit
题目大意:一开始有一对成年兔子,成年兔子没个月生1对兔子 兔子幼子m个月发育成成年兔子 求n个月后兔子总数。m[1,10] ,n[1,100].思路:很容易得到下面的递推式 f(n)=f(n-1)+f(n-m); 但是n的范围可达到100,最大可达到2^100,需要使用高精度加法。 需要注意一开始给的是一对成年兔子 也就是说前m-1个月兔子数为 1 2原创 2010-04-18 11:57:00 · 310 阅读 · 0 评论 -
hdoj 2578
先排序 后查找~之前自己写的查找 提交了 7次 错了7次!~(int *)bsearch(&key, array, NUM, sizeof(), compare); #include using namespace std;int a[100005];int cmp(const void* a,const void* b){ return *(int *)原创 2010-04-16 13:56:00 · 391 阅读 · 0 评论 -
hdoj 2095
题目大意:在输入的数列中 找唯一出现奇数次的一个数。一开始没看到memory limit 直接开了个100000的int数组 然后排序 找出在奇数数位置上与下一位不同的数。网上的大牛们还是那么牛 巧妙地用异或运算 还有用map映射复习下异或~0^0 =00^1=11^0=11^1=0 可以发现 任何数异或0还是他本身。一个数异或另一个数偶数次还是他本身。原创 2010-04-15 12:19:00 · 482 阅读 · 0 评论 -
hdoj 2522
昨天中午在一本书上看到关于循环小数转分数的公式 想起了不久前看到这一道题 于是决定把它做出来 题目大意:给出n 求出1/n的小数形式 循环小数只打出一个循环节解题思路:模拟长除法 不断记录整除的商 不断在余数后补0 直到除尽 或出现循环。因为分子是1,所以除不尽时总是在余数后补0 所以循环的长度肯定小于除数n. 定义一数组circle[]记录出现过的余数。~587ms 724K~原创 2010-04-14 09:04:00 · 456 阅读 · 0 评论 -
hdoj 3283
上次训练的题目 昨天WA一直找不到原因 原来是BIGGEST拼成BIGGSET~ 实在让我恍然大悟~搜了一下 别人用了STL的函数 ~接下来得学学了~ #include using namespace std;int a[82];char c[82];void isort(int e){ int i,j,temp; for(i=0;i for(j=i+1;j if(a[i]原创 2010-03-31 08:37:00 · 311 阅读 · 0 评论 -
hdoj 1052 || poj 2287
从今天起要好好写解题报告田忌赛马很久前在PKU上做过 今天复习贪心时在HDOJ重新做了 耗了一个下午(很是沉不住气提交了相当多次)找个隐藏得很隐蔽的错误~竟是变量名写错~一开始的想法错了 在网上搜了别人的解题报告 被这样一组搜到数据揪出来24 24 1 ====》20024 14 2 ====》0写写自己的一点理解~原创 2010-04-12 20:46:00 · 1442 阅读 · 0 评论 -
hdoj 1164
第一次用筛法求素数~不是很明白 其实~现在心态非常好了 不明白慢慢就会明白了~ #include using namespace std;const MAXN=655635;bool flag[MAXN+1]={0};int prime[50],factor[20];void Init(){ int i,j,n; for(i=2;i*i原创 2010-04-09 12:29:00 · 452 阅读 · 0 评论 -
hdoj 1160
先对fweight 排升序 之后就只要考虑speed了 注意weight 有可能相等 题目要求的是严格的升序而就转换成求 最长不连续递减子序列了~ #include using namespace std;struct mouse{ int w; int s; int order;} m[1005];int f[1005],t[1005],ans[1005];int cm原创 2010-03-26 16:37:00 · 419 阅读 · 0 评论