03 2012 档案

摘要:题意:求在如下的图中的一个数字到另一个数字穿越的最少边数。Analyse:若m,n在同一行上,则step=|m-n|;若不在同一行,先确保m<n。然后讨论:1.m所在的三角形向下,第一步必定先向左(或向右)移动,再向下移动;2.m所在的三角形向上,第一步必定向下移动,然后再向左(或向右)移动。因此第一步先研究m所在三角形的位置和方向,若向下则先向左(或向右)移动一步。后面的移动都以m所在三角形向上为基础。若有移动,先设step=1,否则step=0。设行距为d,列距为hd;若行距与列距相等,则step=step+d*2;若行距小于列距,则step=step+2*d+hd-d;若行距大于列 阅读全文
posted @ 2012-03-30 17:51 Hogg 阅读(431) 评论(0) 推荐(0)
摘要:题意:求有四根柱子的汉诺塔的最小移动次数。Analyse:由移动最后一个盘子时的状态倒推:设f[n]为n个盘子4根柱的移动数,g[n]为n个盘子3根柱的移动数,已知g[n]=2^n-1;第一根柱子上只有最大的盘子,第三根柱子上没有盘子,剩下的盘子都一定在第二或四根上。设有n(n>4)个盘子要移动,先把1,2移到第二(四)根柱子上,3有两个地方可以放(一个选择是放在第二根柱子上,另一个选择是放在第四根柱子上)。假设3放在第四根柱子上,后面的盘子(除最后一个)都跟3一样放在第四根柱子上。若3放在第二根柱子上,4就有两种选择,一直下去,直到k+1要放到第四根柱子时,后面的盘子(除最后一个)都放 阅读全文
posted @ 2012-03-29 13:44 Hogg 阅读(465) 评论(0) 推荐(0)
摘要:题意:计算N!(0<N<=10000)Analyse:大数乘小数问题。还是用比较原始的模拟。这道题调试了好一段时间,真受不鸟,高人指点才发现是个低级错误,d的值没有先用temp储存而错了。View Code 1 #include<stdio.h> 2 #define UNIT 100000 3 typedef struct 4 { 5 __int64 key[10000];//每个key存五位 6 int digit;//每个key算作一个digit 7 }bigint; 8 main() 9 {10 bigint carry;//用来保存相乘后的进位11 b... 阅读全文
posted @ 2012-03-27 19:37 Hogg 阅读(444) 评论(0) 推荐(0)
摘要:题意:路程L,兔子速度VR,乌龟开车速度VT1,踩车速度VT2,给出每个充电站与原点的距离pi,每次充电时间都为T,问乌龟可能不可能赢兔子。Analyse:p1到pn为可充电地点(p0为原点)。假设最优方案中最后一个充电的地点是pn-2,则对于p0至pn-2这段路的充电地点的选择是独立于pn-2至pn之外的,最优方案中,p0到pn-2内的充电点都要选对p0至pn-2最优的地点,因此设time[k]为到达pk点的最快时间,记之前充电的地方为p[lastchar],记p[lastchar](包括p[lastchar],因为可能不充电)到p[k]之间的最优充电点为p[j],则p0到pn的最快时间为t 阅读全文
posted @ 2012-03-27 14:32 Hogg 阅读(753) 评论(0) 推荐(0)
摘要:题意:给你两个集合,要求{A} + {B}.注:同一个集合中不会有两个相同的元素。Analyse:用a[],b[]数组存放两集合的元素,然后分别升序排序,方便比较和输出。输出的大致方法:j从0开始递增,输出所有小于b[j]的a[i],若b[j]不等于a[i],再输出b[j],继续循环直到B的元素输出完毕。最后对于可能剩余的A的元素依次输出。View Code 1 #include<stdio.h> 2 main() 3 { 4 int a[10000],b[10000]; 5 int i,j,FLAG; 6 int m,n; 7 int min,temp; 8... 阅读全文
posted @ 2012-03-25 15:11 Hogg 阅读(338) 评论(0) 推荐(0)
摘要:题意:用n元买药水,有150,200,350元的,多余的钱当作小费,最少要给多少小费。Analyse:首先,350块的无敌药水可以忽略,因为它可以被一个血瓶和一个魔瓶代替,只要血瓶和魔瓶就可以组合了。然后,假设有50*n+m(0<m<50)块,其最少要给的小费是50*n要给的小费加上m块。以五十块为单位,向前试:大钞面额 0 50 100 150 200 250 300 350 400 450 500 550 600最少小费 0 50 100 0 0 50 0 0 0 0 0 0 0150*4+200*0=60... 阅读全文
posted @ 2012-03-25 00:46 Hogg 阅读(289) 评论(0) 推荐(0)
摘要:吃糖果Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 9730 Accepted Submission(s): 2825Problem DescriptionHOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样;可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下。Input第一... 阅读全文
posted @ 2012-03-22 11:19 Hogg 阅读(1648) 评论(0) 推荐(0)
摘要:题意:第i层的硬币有i*(i+1)/2个,问总共有n(n<=2^31-1)层的总共有多少硬币,要求用科学计数法保留3位有效数字。Analyse:给出了第i层的金币数i*(i+1)/2,求的是n层的总金币数,n^3=(n-1)^3+3*(n-1)^2+3*(n-1)+1(n-1)^3=(n-2)^3+3*(n-2)^2+3*(n-2)+1(n-2)^3=(n-3)^3+3*(n-3)^2+3*(n-3)+1…………3^3=2^3+3*2^2+3*2+12^3=1^3+3*1^2+3*1+1累加整理得sum=( (n+2)^3-(3*n^2+10*n+8) )/6。但是数据最大有2^31-1 阅读全文
posted @ 2012-03-21 13:52 Hogg 阅读(280) 评论(0) 推荐(0)
摘要:题意:找出大于或等于2992的所有特殊的四位数,这种数字在十进制形式下的各位之和与八进制和十二进制的各位之和都相等。Analyse:考的明显是进制转换。若有一个整数a=b[n]*10^n+b[n-1]*10^(n-1)+……+b[1]*10+b[0],要转换成十进制,我们可以从它十进制形式的最后一位开始往前取,先对10取余,再整除10,再取余,再整除10……,一直做n次即可。View Code 1 #include<stdio.h> 2 main() 3 { 4 int temp,i,t,sum10,sum12,sum16; 5 for(i=1000;i<=9999;i++) 阅读全文
posted @ 2012-03-20 22:21 Hogg 阅读(340) 评论(0) 推荐(0)
摘要:排序Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 19273Accepted Submission(s): 5005Problem Description输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。Input输入包含多组 阅读全文
posted @ 2012-03-17 20:23 Hogg 阅读(3010) 评论(0) 推荐(0)
摘要:题意:原本是1的字符经一步变化会变成01,原本是0的字符经一步变化变成10,初始状态是1,问经过n步之后有多少段连续的0.Analyse:找规律:n 字符串 连续00 1 01 01 02 1001 13 01101001 14 1001011001101001 35 01101001100101101001011001... 阅读全文
posted @ 2012-03-15 15:20 Hogg 阅读(487) 评论(0) 推荐(0)
摘要:题意:给出数量相等的大王的马的速度与田忌的马的速度,找一个最好的方案使田忌战绩最优,赢一局200元。Analyse:传闻这是个贪心算法的题。为体现田忌的马的生存价值,总思想是能跑赢的就要跑赢能大王赢的最快的马,不能赢的(包括输的)必须要输给大王最快的马。具体做法:1.田忌最慢的马若能赢大王最慢的马就赢,一定输的就跟大王的最快的马比。2.若田忌最慢的马跟大王最慢的马平局,则比较田忌最快的马与大王最快的马,能赢则赢;只要不能赢就让大王的快马对田忌的慢马。不能赢的情况包括:平:若能平局,则田忌最快的马比大王剩下的马都快。让大王最快的马赢田忌最慢的马,田忌的快马起码扳回一局,而且增加后面的马的胜率。败 阅读全文
posted @ 2012-03-14 22:58 Hogg 阅读(680) 评论(0) 推荐(0)
摘要:搬寝室Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7145 Accepted Submission(s): 2410Problem Description搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不大于 阅读全文
posted @ 2012-03-14 13:54 Hogg 阅读(239) 评论(0) 推荐(0)