CCNU 2010新生练习赛1解题报告

第一次写解题报告,望指点。

题目:http://acm.hdu.edu.cn/diy/contest_show.php?cid=9821

整套练习都是递推的题。由于结果较大,所以一些题需要变量为long long。有几道题用到高精度运算。

 

 


 

 

1001

 

题目:

 

f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.

Given A, B, and n, you are to calculate the value of f(n).


方法1:矩阵快速幂。构造矩阵,

 

| A B | | f(n-1) |  =  | A*f(n-1) + B*f(n-2) |  =  | f(n)    |

| 1 0 | | f(n-2) |       |          f(n-1)             |      | f(n-1) |

 

           由此递推关系和矩阵快速幂取余数可得到结果。

方法2:黄子龙同学比较另类的方法,找规律,f(n)结果是有规律的

 

 


 

 

1002

 

题目:

 

有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?

 

方法:现在要上到第N(N>=3)级台阶,可以从第N-1级跨一级直接上去,也可以从第N-2级台阶跨两级上去。所以设上到第N级有f(N)种方法,则递推式为

f(N)=f(N-1)+f(N-2)。f(1)=1。f(2)=1.

为典型斐波那契数列。

 

 


 

 

1003

 

题目:

 

每过一次收费站取走羊总数的一半再返还一只,最后剩3只,给收费站数目,求最初羊的数目。

 

方法:f(n)= ( f(n-1)-1 )*2。f(0)=3

 

 


 

 

1004

 

题目:

 

有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。其中,蜂房的结构如下所示。

 

方法:比如到编号为5的蜂房,可以从编号为3或编号为4的蜂房一步走到。所以依旧为斐波那契数列。最后输出数列的第(b-a+1)项的值即可。

 

 


 

 

1005

 

题目:

 

有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.

 

方法:假设现在有N个方格,则N个方格的涂法f(N)可由两种方法递推到:(1)当方格数为N-1时,在其末尾加一个方格,由于首位方格颜色不能相同,并且与相邻方格颜色不能相同,所以在末尾加的方格颜色是固定的。在这种情况下,末尾不可能加与列开头颜色相同的方格。(2)当方格数为N-2时,由于要添加两个方格,由于倒输第二个与列开头方格颜色可以相同,所以先加一个与开头颜色相同的方格,剩下一个方格还有2种颜色可选。

f(N)=f(N-1)+f(N-2)*2。f(1)=3。f(2)=6。f(3)=6。

 

 


 

 

1006

 

题目:

 

在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:

方法:依旧为斐波那契数列。第n项可由第n-1项添加1个竖放的得到,也可由第n-2项加两个横放的得到

 

 


 

 

1007

 

题目:

 

n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。输出平面的最大分割数。

方法:每个折线由两条射线组成,当射线相交时,每增加一个交点(顶点),分割数+1,所以最终分割数为

f(n)=交点数+顶点数+1

交点数=2*n*(n-1) ;定点数=n;

故f(n)=2*n*(n-1)+n+1

 

 


 

 

1008

 

题目:

 

假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能


方法:.........错排+组合。先用组合的方法,从N对新婚夫妇中选出M对,方法数为C(M,N)。设n个人全错排方法数为A[n]

则该题情况数为f(N,M)=C(M,N)*A[n];

 

错排: 

 

 

 


 

1009

 

题目:

 

首先,所有参加晚会的人员都将一张写有自己名字的字条放入抽奖箱中;然后,待所有字条加入完毕,每人从箱中取一个字条;最后,如果取得的字条上写的就是自己的名字,那么“恭喜你,中奖了!”,求最后没有一个人中奖概率。

 

方法:错排+排列。所求概率即为 全错排方法数A[n]/全排方法数n!

 

 


 

 

1010

 

题目:

长度为n的只由"E" "O" "F"三种字符组成的字符串(可以只有其中一种或两种字符,但绝对不能有其他字符),阿牛同时禁止在串中出现O相邻的情况,他认为,"OO"看起来就像发怒的眼睛,效果不好。

你,NEW ACMer,EOF的崇拜者,能帮阿牛算一下一共有多少种满足要求的不同的字符串吗?

方法:

 

从左往右依次增加字符,当长度为n时,可以由n-1个的情况在末尾加“E”或者“F”,但不能加“O”,否则会出现“OO”的情况,所以想加“O”,则需要在n-2的情况下在末尾加“OE”或“OF”,所以递推为:

A[n]= (A[n-1]+A[n-2])*2。A[1]=3。A[2]=8。

 

 


 

 

1011

 

题目:

 

Suppose the cinema only has one ticket-office and the price for per-ticket is 50 dollars. The queue for buying the tickets is consisted of m + n persons (m persons each only has the 50-dollar bill and n persons each only has the 100-dollar bill).

Now the problem for you is to calculate the number of different ways of the queue that the buying process won't be stopped from the first person till the last person. 

Note: initially the ticket-office has no money. 

 

 

方法:

 

1 0 1 =X[0][0]=1

1 1 1 =X[0][1]=1

 

2 0 1 =X[1][0]=1

2 1 X[0][1]+X[1][0] =X[1][1]=2

2 2 X[1][1] =X[1][2]=2

 

3 0 1 =X[2][0]=1

3 1 X[1][1]+X[2][0] =X[2][1]=3

3 2 X[1][2]+X[2][1] =X[2][2]=5

3 3 X[2][2] =X[2][3]=5

 

4 0 1 =X[3][0]=1

4 1 X[2][1]+X[3][0] =X[3][1]=4

4 2 X[2][2]+X[3][1] =X[3][2]=9

4 3 X[2][3]+X[3][2] =X[3][3]=14

4 4 X[3][3] =X[3][4]=14

 

 

 

 


 

 

1012

 

题目:

 

在一无限大的二维平面中,我们做如下假设:

1、  每次只能移动一格;

2、  不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);

3、  走过的格子立即塌陷无法再走第二次;

 

求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。

 

方法:

 

设当步数为n的时候,有A[n]个向上的箭头,B[n]个左右方向的箭头,则A[n+1]=A[n]+B[n],B[n+1]=A[n]*2+B[n]

 

 


 

1013

 

同1012,要用到高精度,其它一样

 


 

 

1014

 

题目:

 

There are many students in PHT School. One day, the headmaster whose name is PigHeader wanted all students stand in a line. He prescribed that girl can not be in single. In other words, either no girl in the queue or more than one girl stands side by side. The case n=4 (n is the number of children) is like
FFFF, FFFM, MFFF, FFMM, MFFM, MMFF, MMMM
Here F stands for a girl and M stands for a boy. The total number of queue satisfied the headmaster’s needs is 7. Can you make a program to find the total number of queue with n children?

 

方法:

 

A[n]= A[n-1] +A[n-2] +A[n-4]

+M +FF +MFFF

 


 

 

1015

 

题目:

 

学校教室的长度为n米,宽度为3米,现在我们有2种地砖,规格分别是1米×1米,2米×2米,如果要为该教室铺设地砖,请问有几种铺设方式呢?

 

方法:A[i]=A[i-2]*2+A[i-1]

 

 


 

 

1016

 

题目:

 

假定一个字符串由m个H和n个D组成,从左到右扫描该串,如果字符H的累计数总是不小于字符D的累计数

 

方法:同1011

 


 

 

1017

 

题目:

 

This is a small but ancient game. You are supposed to write down the numbers 1, 2, 3, ... , 2n - 1, 2n consecutively in clockwise order on the ground to form a circle, and then, to draw some straight line segments to connect them into number pairs. Every number must be connected to exactly one another. And, no two segments are allowed to intersect.
It's still a simple game, isn't it? But after you've written down the 2n numbers, can you tell me in how many different ways can you connect the numbers into pairs? Life is harder, right?

 

方法:Catalan numbers

(2n)!/(n!(n+1)!)


 


 

 

1018

 

题目:

 

有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法。

 

方法:A[i]=2*A[i-2]+A[i-1]

 

 


 

 

1019

 

题目:

 

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

 

方法:A[n]=A[n-1]+A[n-3],A[1]=1,A[2]=2,A[3]=3

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值