自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 HDU1022 Train Problem I

是一道很露骨的模拟栈的题目,但是由于第一次做到,还是卡了一下的。就是用一个stack来模拟,让进栈的序列逐个进栈,然后再每次都判断一下是否与当前出栈序列的位置符合,如果不符合就继续进栈,如果符合就出栈,弄清楚各个的标记即可。因为如果当前的栈顶符合出栈序列的当前位置却不出栈的话,它一定会在接下来入栈的车的后面出栈,就不可能符合给定的出栈顺序。然而题目的数据好弱,后来才发现我都忘了用题目中

2015-08-30 20:59:13 577

原创 HDU2.2.6 Digital Roots

刚开始想复杂了,掉进坑里了,而且还用了 这个库来用stream的方法将int类型转化为string类型,但是我总算明白了为什么当年书上叫我们慎用stream了,这速度真是慢的感人,直接让我TLE了这个方法应该是可行的,就是时间方面不允许,这种方法的代码如下:#include #include #include using namespace std;std::strings

2015-08-29 22:25:09 355

原创 HDU2.2.5 三角形

这题刚开始觉得好难,在纸上画画感觉没什么规律,后来才发现只要写出前四个就可以找出规律了这个就是需要画图画的细致一点,尤其是四个三角形的时候一个三角形是2、两个三角形是8、三个三角形是20、四个三角形是38它们之间的差是6、12、18   都是6的倍数于是就想到了a[i]=a[i-1]+6*(i-1)后来在网上也看到了另一种解释,虽然也没有证明(也可以看成是找规律吧),就是每种情

2015-08-29 20:58:06 562

原创 HDU2.2.4 Wolf and Rabbit

和之前有一题一样,那题是很多人坐成一个圈,然后每隔几个人报数,原理相同,即为m与n互质即可全部遍历。代码如下:#include #include using namespace std;unsigned long gcd(unsigned long a,unsigned long b){ if(a<b){ unsigned long temp=a; a=

2015-08-19 23:11:56 436

原创 HDU2.2.3 汉诺塔VII

这道题卡了我好几天,不过最后还是想出来了,我用的是迭代的方法,效率上要比网上查到的递归DFS要高一些,但是却不如那种方法直观。现在我把两种方法都放上来好了。基本思路都是一样的:先自己在草稿纸上画画汉诺塔的移动方法,然后再找规律。我们可以发现,对于N个盘子,最开始是在A柱上,然后之前离散课上分析所需步骤数的时候是转化成较小的子问题,即把N-1个盘子通过某种方法移动到B柱上,然后再把第N个

2015-08-19 22:21:18 637

原创 HDU2.2.2 Joseph

刚开始没有去考虑复杂度,直接很单纯地模拟,然后果然超时了···但是一看到这么少的数据种类(k只有1到13),那么直接打表就好,打表的话妈妈再也不怕我超时了~还是提一句,所谓打表就是提前把所有可能的情况都存在一个数组里,然后根据输入直接输出相应数组中的数即可。其实打表就是把原来会超时的代码利用本地运行来节省时间,单纯拿出结果。这虽然有点流氓,但是还是很实用的一种方法,打表的代码和

2015-08-10 22:13:14 742

原创 HDU2.2.1 Fibonacci

这年头数学真的太重要了···第一次遇到这么大的斐波那契数列,用数组递推肯定会被卡掉的后来网上看了看别人的解题报告才想起来斐波那契数列是有递推公式的递推公式的话自行百度好了,这里打起来很麻烦···关键其实还是如何取大数的前四位,其实之前遇到过的那题取N^N的第一位的题是差不多的,但是由于那题没有搞得很清楚,导致这题也卡主了,以后再也不这样了···其实就是如果我们要求一个数的前4位,比

2015-08-09 16:32:25 685

原创 HDU2.1.8 小数化分数2

分成三种情况来讨论:(1)只有普通小数(2)只有循环小数(3)前面是普通小数,后面跟着循环小数把普通小数的位数num和循环小数位数(即为括号中的数字个数)cir_num统计出来对于情况(1),就是把小数表示的数字除以对应的10的次方,比如0.32对应32/(10^2)对于情况(2),就是把小数表示的数字除以对应的10的次方减1,比如0.(32)对应32/(10^2-1)

2015-08-08 18:13:45 1346

原创 HDU2.1.7 Leftmost Digit

看到这么大的数据,本来第一反应是高精度,但是感觉10亿的10亿次还是会爆的,于是又想了很久,但是实在想不出,于是只好去其他博客里看看解答。看完了解答真是忍不住拍手喝彩,这就是数学境界的差距。假设M=N^N,那么题目就是要求M的第一位数字,两边求log(10为底数),于是log(10)M=Nlog(10)N,于是M=10^(Nlog(10)N),由于10的整数次方必然是1000···0,最高

2015-08-08 17:20:58 582

原创 HDU2.1.6 The area

又是一道数学题而且刚开始一时疏忽竟然把抛物线方程设成了y=-(x-x1)^2+y1,连a都忘记设了,后来检查时才发现,后面的就很简单了,把抛物线和直线都表示出来然后算一下定积分即可。代码如下:#include #include #include #include using namespace std;double f(double x,double k,double b,

2015-08-08 09:10:33 539

原创 HDU2.1.5 找新朋友

刚开始就想着每个数都和N判断一下gcd是否为1即可,但是这样显然会超时。然后又想到了打表,但是感觉这题没必要打表···然后就用了判断其因子,然后把每个因子对应的flag都标记一下即可代码如下:#include #include #include #include using namespace std;bool flag[32768];int main(){ i

2015-08-08 08:42:39 559

原创 HDU2.1.4 Cake

直觉就是这题会有公式,然后和别人一起讨论了很久之后毫无进展后来只好参考了一下别人博客里的想法终于恍然大悟就是把一个圆,在圆周上画点将其等分,想分成p等份需要画p个点想分成q等份需要画q个点并且如果都是从同一个起点开始画,那么会有gcd(p,q)个点是重合的于是公式就是p+q-gcd(p,q)代码如下:#include #include using namespa

2015-08-07 22:01:59 582

原创 HDU2.1.3 相遇周期

为什么感觉是题目出错了···我刚开始的做法是根据所给数据求出两个卫星的各自周期T1和T2然后再用T1*T2/abs(T2-T1)即可但是这样求出来和样例拍不上上网查了一下,(虽然我并不明白原理),是要把原来的分数先化为最简,然后求分子的最小公倍数作为分子,以及分母的最大公约数作为分母,再把它们约分到最简单即可得到结果,但是我仍然认为自己最初的做法是对的···用这个所谓的能AC的

2015-08-07 21:15:57 1124 3

原创 HDU2.1.2 How many prime numbers

就是判断质数,因为数据范围比较小,所以直接用最普通的判断方法即可,也就是枚举比其平方根小的数看看是不是它的因子。如果数据范围很大的话可以用素数的线性筛法,以后应该会碰到。代码如下:#include #include #include #include using namespace std;bool isprime(int x){ for(int i=2;i<=sqrt

2015-08-07 10:13:34 472

原创 HDU2.1.1 最小公倍数

求两个数a,b的最小公倍数的方法:先求出a与b的最大公约数c,然后再用a与b的乘积除以c即可得到最小公倍数最小公倍数则用欧几里得算法即可代码如下:#include #include #include using namespace std;int gcd(int a,int b){ if(a<b){ int temp=a; a=b; b=temp; }

2015-08-07 10:03:29 589

原创 HDU1.3.8 As Easy As A+B

就是排序,输出格式有点蛋疼,必须是每个数之间都有空格,但是最后一个数后不能有空格代码如下:#include #include #include #include using namespace std;int a[1001];int main(){ int T; cin>>T; while(T--){ int N; scanf("%d",&N); for

2015-08-07 10:00:42 403

原创 HDU1.3.7 Crixalis's Equipment

最开始没想清楚,就直接根据物品的B来排序,想着把B大的物体先放入,但是WA了后来自己想了一个例子,比如V有11,然后物品1是10  11,物品2是1  1,此时要先放1但是当物品1是10  10,物品2是1  3时,要先放物品2于是想到了根据B与A的差来排序,因为当B与A相同时肯定是放在最后放的,因为不需要去“照顾”这种类型的物品B与A差值越大的越需要先放还有一种比较科学的分析

2015-08-06 14:43:10 453

原创 HDU1.3.6 Rank

遍历一遍记录比他分数高的人即可这题学到了点新东西,就是这种不提前给test case的个数的题目以前只会根据scanf()!=EOF来判断,这次为了用cin读入字符串,cin读入后返回的是字符流,如果读入失败本身就会返回false因此只需要用一个while(cin>>x)来判断给的输入文件是否结束即可代码如下:#include #include #include usin

2015-08-05 18:51:46 358

原创 HDU1.3.5 Saving HDU

刚开始看描述还以为是背包,看到后面可分割才明白是最简单的排序···代码如下:#include #include #include using namespace std;struct thing{ int p; int volume;}t[110];bool com(thing a,thing b){ return a.p>b.p;}int main(){

2015-08-05 18:27:14 438

原创 HDU1.3.4 开门人和关门人

就用string类型排一下序就好了而且string类型比较方便的是可以直接比较大小而不需要使用strcmp顺便吐槽一句为什么HDU的提交选择C++就不能识别cin>>导致CE,换成G++以后就AC了代码如下:#include #include #include #include using namespace std;struct person{ string ID;

2015-08-05 16:46:33 505

原创 HDU1.3.3 百步穿杨

唯一需要知道的就是结构体排序吧,自己写一个排序规则即可代码如下:#include #include #include using namespace std;struct arrow{ int l; int num;}a[40];bool com(arrow a,arrow b){ return a.l<b.l;}int main(){ int T; c

2015-08-05 16:25:58 562

原创 HDU1.3.2 今年暑假不AC

刚开始不知道怎么做,以为是动态规划之类的后来才发现是贪心即可就是把节目根据结束时间排序,然后选择结束最早的节目,再选择下一个能选择的节目里结束最早的节目,就这样一直选下去即可然后要注意节目可以无缝衔接,即比较的时候是代码如下:#include #include #include #include using namespace std;struct tv{ int

2015-08-05 16:14:43 403

原创 HDU1.3.1 FatMouse' Trade

就是贪心,算出每个房间的J/F的比值,然后排序,再按性价比从高到低去取有人提到F可能为0,这种情况也包括在内了,因为F为0时quo即为无穷大,那么必然会去先取那个无穷大性价比的房间。代码如下:#include #include #include #include using namespace std;struct room{ int J; int F; double

2015-08-05 09:16:58 531

原创 HDU1.2.8 Lowest Bit

利用位运算判断最后一位是不是1,如果不是的话就把A向右移一位,并把计数器向左移一位(即乘二)#include #include using namespace std;int main(){ int A; scanf("%d",&A); while(A){ int temp=1;; while(!(A&1)){ A>>=1; temp<<=1; }

2015-08-04 22:17:49 423

原创 HDU1.2.7 Higher Math

勾股定理,注意输出格式即可#include #include #include using namespace std;int main(){ int T; cin>>T; for(int _=1;_<=T;_++){ int a[3]; scanf("%d%d%d",&a[0],&a[1],&a[2]); sort(a,a+3); printf("Scena

2015-08-04 22:09:59 494

原创 HDU1.2.6 Buildings

简单读入矩阵的同时计数可以用bool类型#include #include #include using namespace std;int main(){ int T; cin>>T; while(T--){ int m,n; bool a[101][101]; scanf("%d%d",&m,&n); int count=0; for(int i=

2015-08-04 22:00:16 390

原创 HDU1.2.5 find your present (2)

这种特别大的数,开一个数组不现实,于是想到用mapHDU不支持bits/stdc++.h让我郁闷了好久,都要一个一个打头文件好麻烦···刚开始还把map定义成全局函数导致WA了后来改成在循环内部就AC了代码如下#include #include #include #include #include using namespace std;int main()

2015-08-03 21:26:55 524

原创 HUD1.2.4 Nasty Hacks

又是一道超级水的小学数学题···感觉杭电的这个难度安排有点奇怪呀#include #include #include #include using namespace std;int main(){ int n; cin>>n; while(n--){ int r,e,c; scanf("%d%d%d",&r,&e,&c); if(r>e-c) print

2015-08-03 20:45:51 440

原创 HDU1.2.3 hide handkerchief

最开始以为只是一道超级水的模拟题,但是用以下的模拟会超内存限制#include #include #include using namespace std;bool a[100000001];int main(){ int N,M; scanf("%d%d",&N,&M); while(N!=-1&&M!=-1){ int temp=1; memset(a,0,si

2015-08-03 20:43:02 471

原创 HDU1.2.2 Biker's Trip Odometer

勉强能算作数学题吧···注意单位转换即可#include using namespace std;#define p 3.1415927int main(){ int N=1; while(1){ float d,t; int r; scanf("%f%d%f",&d,&r,&t); if(r==0) return 0; float dis,MPH;

2015-08-03 20:40:04 539

原创 HDU1.2.1 Elevator

就是简单的模拟电梯的情况即可#include using namespace std;int main(){ while(1){ int i,j=0,temp[2],N; long time=0; scanf("%d",&N); if(N==0) return 0; scanf("%d",&temp[0]); time+=6*temp[0]; time+=5; f

2015-08-03 20:37:55 619

原创 HDU1.1.2 A+B for Input-Output Practice (II)

就是给定test case的输入求和推荐用while(T--)来控制次数#include using namespace std;int main(){ int i,a,b,N; scanf("%d",&N); while(N--){ scanf("%d%d",&a,&b); printf("%d\n",a+b); } return 0; }

2015-08-03 20:35:57 453

原创 HDU1.1.1 A+B for Input-Output Practice (I)

就是简单的整数相加,当没有输入的时候退出。很早以前就是通过这题知道了用scanf()!=EOF来检验是否还有输入#include using namespace std;int main(){ int a,b; while(scanf("%d%d",&a,&b)!=EOF){ printf("%d\n",a+b); } return 0; }

2015-08-03 20:33:18 511

空空如也

空空如也

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

TA关注的人

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