自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sp_

  • 博客(70)
  • 资源 (1)
  • 收藏
  • 关注

原创 猜数字小游戏(MiniGUI)

写的一个简单猜数字小游戏~ 编译运行gcc -o GuessNum GuessNum.c -lminigui -lpng -lpthreadqvfb -width 640 -height 480 -depth 8./GuessNum #include #include #include #include #include #include #in

2011-06-24 10:16:00 1122 1

原创 简易mp3播放器(SDL)

写一个简单的mp3播放器,去掉了界面。有个问题就是不能自动播放下一曲。   gcc -o easymp3 easymp3.c -L/usr/lib -lSDL -lSDL_mixer  ./easymp3 ~/mp3/*.mp3 #include #include #include #include #include "SDL/SDL.h"#include

2011-06-18 19:37:00 2426

原创 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 485

原创 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 440

原创 解决Linux上Dr.com

<br />Linux新手,系统Ubuntu10.10,学校通过drcom验证上网。<br /> <br />A.使用drcom-client-PUM1.0(http://www.drcom-client.org),结果:失败<br /> <br />二进制包安装后提示升级版本。源码包按网上的改了两行代码,成功编译安装提示帐号密码错误。<br /> <br />B.使用drcom-client 1.4.8.2 + 1.4.8.3(http://sourceforge.net/projects/drcom-c

2011-03-05 17:17:00 1030

原创 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 583

原创 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 810 1

原创 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 1125

原创 平面切分空间

<br /><br /><br />n个点最多把直线分成C(n,0)+C(n,1)份; <br />n条直线最多把平面分成C(n,0)+C(n,1)+C(n,2)份; <br />n个平面最多把空间分成C(n,0)+C(n,1)+C(n,2)+C(n,3)=(n³+5n+6)/6份; <br />n个空间最多把“时空”分成C(n,0)+C(n,1)+C(n,2)+C(n,3)+C(n,4)份;<br />...<br />C(a,b)表示从a个元素中取b个的组合数<br /> <br /><br />附:讨

2011-02-12 21:35:00 2525 1

原创 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 637

原创 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 584

原创 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 1113 1

转载 [转]P NP NPC NP-Hard

<br />转自:http://www.matrix67.com/blog/archives/105<br /> <br />  这或许是众多OIer最大的误区之一。<br />    你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已经被澄清了。下面的内容都是在讲什么是P

2010-10-05 19:58:00 514

原创 两道O(n)面试题

两道O(n)面试题1.      给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有 k个,且它们是完全随机的(出现概率均等)。 保存前k个元素于集S. 从第k+i(i>0)个开始, 令r1=rand(1,k+i), 如果r1>k, 则保持现有的选择集合S不变 . 如果r1ReservoirSampling (蓄水池抽样)                       Init : a reservoi

2010-10-02 10:19:00 600

原创 淡泊明志 宁静致远

<br />“诫子书”—诸葛亮夫君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。夫学须静也,才须学也。非学无以广才,非志无以成学。淫慢则不能励精,险躁则不能治性。年与时驰,意与岁去,遂成枯落,多不接世。悲守穷庐,将复何及?

2010-09-27 23:17:00 501

原创 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 513

原创 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 679

原创 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 664

原创 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 1280

原创 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 453

原创 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 575

原创 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 487

原创 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 432

原创 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 432

原创 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 903

原创 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 930 2

转载 关于负数求余(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 2384

原创 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 544

原创 POJ 1118+2606+2780 (求平面上同一条直线的最多点数)

<br />题目大意:给出平面上若干点,求属于同一条的直线的最多点数。<br /> <br />思路:分别求出其中一点与其它点的直线的斜率,进行排序,如果斜率相同则同一条直线。<br /> <br />注意:一开始写的时候分别把所有点与其他所有点的斜率都算了,结果超时。其实只要算与后面的所有点的斜率即可。(因为两点决定一直线,前面的两点决定的直线已经算过。)<br /> <br />很好的思想,又学习了。下面是2780的代码:<br /> <br />#include <iostream>using n

2010-07-13 01:47:00 2860 2

原创 POJ 2479 + POJ 2593(DP 最大双子序列 ^_^)

<br />题目大意:序列a[] ,求如下S.<br /><br /> <br />思路:自左向右和自右向左分别DP。<br />         用left[i]表示序列1—i所能取最大和。<br />         用right[i]表示序列n—i所能取到的最大和。<br />ans=max(left[i]+right[i+1]) (1<=i<=n-1)<br />或 max(right[i]+left[i-1]) (2<=i<=n)<br /> <br />思路很经典,学习了。<br />下面的程序

2010-07-05 13:40:00 1515

原创 (转)数组名和指针的区别

<br /><br />原文地址:http://blog.sina.com.cn/s/blog_49e22ee80100a6qa.html<br /> <br />魔幻数组名<br />请看程序(本文程序在WIN32平台下编译):<br />1. #include <iostream.h><br />2. int main(int argc, char* argv[])<br />3. {<br />4.  char str[10];<br />5.  char *pStr = str;<br />6.  

2010-07-02 15:54:00 353

原创 hdoj 1238 (substring)

<br />暑假了 , 贴贴很久前的代码,今年暑假要AC。<br /> <br />#include <iostream>#include <string>using namespace std;void Reverse(char str[],int n){ int l; char temp; for(l=0;l<n/2;l++) { temp=str[l]; str[l]=str[n-l-1]; str[n-l-1]=temp; }}int m

2010-07-02 15:18:00 562

原创 poj 1088 滑雪(DP)

<br />题目大意:滑雪,从任意点开始,只能滑向高度递减的,求最长长度。<br />思路:dp[x][y]保存从(x,y)出发的能最长长度。<br /> <br />其中的递归搜索会不会出现循环呢?<br />答案是不会的,因为只能往高度减小的方向,所以只能往一个方向,不可能反向回来再递归,所以不会出现循环。<br /> <br />昨天看球的时候写的,把递归里的r和c弄反了,早上找了半天才找出错误……所以说一心不能二用呐。<br /> <br />#include <iostream>using n

2010-06-29 12:14:00 481

原创 hdoj 2084(数塔)

<br />#include <iostream>using namespace std;int a[5100];int main(){ int N; int f,sum,i,j,t; scanf("%d",&N); while (N--) { scanf("%d",&f); sum=f*(1+f)/2; for (i=1;i<=sum;i++) scanf("%d",&a[i]); t=sum-f; for (i=f-1;i>0;i

2010-06-28 21:35:00 340

原创 zoj 1986(最长上升子序列)

<br />题目大意:最长递增子序列(n可达到40000)<br />思路:len保存最长递增子序列长度,折半查找,时间复杂度为O(n*lgn).<br /> <br />在网上找到的,这里有很详细的解释<br />http://argo.sysu.edu.cn/bbsanc?path=boards/ACMICPC/D.1044598816.A/D.1044598812.A/M.1162721770.A<br /> <br />#include<iostream>using namespace std;

2010-06-27 18:39:00 683

原创 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 701

原创 关于取整 四舍五入

函数名: 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 703

原创 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 391

原创 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 968

原创 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 3799 1

关于C语言宏定义技巧

C语言宏定义技巧 就是关于C语言宏定义的一些技巧

2010-10-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除