摘要: 题意:向n个人发n封信,全部都发错的情况有多少种Analyse:记错排的符号为f(n),则f(n)=A(n,n)-C(n,1)*f(n-1)-C(n,2)*f(n-2)……-C(n,n-2)*f(2)-1(表示n个元素的全排列排除有k(1<=k<=n-2)个放对位置的情况,不存在n-1个放对位置的情况,最后的1表示全部放对的情况),有f(n-1)=A(n-1,n-1)-C(n-1,1)*f(n-2)-C(n-1,2)*f(n-3)……-C(n-1,n-3)*f(2)-1,将f(n-1)代入到f(n)得到,f(n)=C(n,2)*f(n-2)+2*C(n,3)*f(n-3)+……+( 阅读全文
posted @ 2012-04-04 15:55 Hogg 阅读(549) 评论(0) 推荐(0)
摘要: 题意:有整数元素1到n,最小的序列定义为1,2,3……,n-1,n,倒数第二小的是1,2,3,……,n,n-1,倒数第三小的是1,2,3,……,n-1,n-2,n。求倒数第m小的序列。Analyse:拿第一个实例开始分析:原本的数列是1,2,3,4,5,6,若要第1个最小的数列,则需要改变最后1个数字的顺序,若要第2个最小的数列,则需要改变最后2个数字的顺序,若要第3个最小的数列,则需要改变最后3个数字的顺序,若要第4个最小的数列,则需要改变最后3个数字的顺序。要第m个最小的数列,我们需要改变最后k((k-1)!<m<=k!)个数字的顺序。因为要的数列是第四个最小的数列,因此要改变 阅读全文
posted @ 2012-04-01 15:16 Hogg 阅读(507) 评论(0) 推荐(0)
摘要: 题意:求在如下的图中的一个数字到另一个数字穿越的最少边数。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 阅读(453) 评论(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 阅读(483) 评论(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 阅读(456) 评论(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 阅读(778) 评论(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 阅读(349) 评论(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 阅读(307) 评论(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 阅读(1664) 评论(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 阅读(302) 评论(0) 推荐(0)