模拟赛总结(21.12.02)
-
我先放两张图在这里()
总结
-
这是人生中第一次模拟赛,还是有一些地方不太细心,比如说
《因为打错文件名而痛失100分这件事》
-
然后因为时间有限只有二十分钟导致三道题只能取舍着做(还是我菜
-
第一题计算系数,看了两眼,
数学渣选择直接跳过(后来证明这个选择非常正确) -
第二题汉诺塔,看到题目先想到的是“move 1 from a to c”这类的(其实这习惯不怎么好,毕竟万一在原题基础上稍加改动可能就被坑了),然后第二眼看见是输出最少步数,想到了\(2^n-1\)这个公式。
-
第三题骨牌覆盖,很简单的一道递归(斐波那契数列)题,一方面是做过,另一方面是对这类简单的、会用到斐波那契的问题已经稍微有了点直觉,知道了需要用斐波那契做
,还有就是列举前几项,一看,诶嘿我会了但是如果看我的代码会发现,我写了个高精度......为什么呢,因为我测边界数据发现int不行,又拿long long去试,然后我printf里面的%d忘改了。。。忘。改。了。o(≧口≦)o
然后我一看好家伙这么麻烦还得写高精,寻思了一下,写了个结构体高精加的函数
没办法,拿着锤子看什么都像钉子(?......这么一搞,我感觉多耗了一倍还多的时间
教训
-
文件名、固定输出一定直接复制,再不济也要检查一下
-
改变量类型的时候记得想一下有没有printf里面的输出类型没改
题解
-
计算系数
题目描述:给定一个多项式\((ax+by)^k\),请求出多项式展开后\(x^ny^m\)项的系数。
输入格式:共一行,包含5个整数,分别为a,b,k,n,m,每两个整数之间用一个空格隔开。
输出格式:输出共1行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007取模后的结果。
样例输入:1 1 3 1 2
样例输出:3
数据范围:
对于30%的数据,有\(0≤k≤10\);
对于50%的数据,有\(a=1,b=1\);
对于100%的数据,有\(0≤k≤1,000,0≤n,m≤k\),且\(n+m=k,0≤a,b≤1,000,000\)。
考试时候完全不知道怎么做
重点是我在纸上举例好像还算错了。。。淦!
交完之后去洛谷搜了一下题解,奥原来是杨辉三角吗
当然,可以选择打表找规律(?
首先列举\(a=1,b=1\)的情况:
\(k=1,(x+y)^k=x+y\)
\(k=2,(x+y)^k=x^2+2xy+y^2\)
\(k=3,(x+y)^k=x^3+3x^2y+3xy^2+y^3\)
去掉x,y,就会发现这是个杨辉三角...
第n行的m个数可表示为 \(C^{m-1}_{n-1}\),即为从n-1个不同元素中取m-1个元素的组合数。
所求答案为杨辉三角第k+1行、第k-n+1列的值乘上\(a^nb^m\)
所以结果即为\(C^{k-n}_{k}*a^n*b^m\)
算就完了
别忘了取模
-
汉诺塔
题目描述:
汉诺塔由编号为1到n大小不同的圆盘和三根柱子a,b,c组成。开始时,这n个圆盘由大到小依次套在a柱上,如图所示。
要求把a柱上n个圆盘按下述规则移到c柱上:
(1)一次只能移一个圆盘,它必须位于某个柱子的顶部;
(2)圆盘只能在三个柱上存放;
(3)任何时刻不允许大盘压小盘。将这n个盘子从a柱移动到c柱上,最少需要移动多少次?
输入格式:第一行输入一个正整数n\((1<=n<=30)\),表示圆盘的数量。
输出格式:输出一个数表示最少需要移动的次数。
样例输入:3
样例输出:7
我其实是直接套公式做的......就\(2^n-1\)
这个公式的来历:
-
因为每次操作的函数里面都有三个操作:①从原柱移到过渡柱上②将底盘移到目标柱③从过渡柱移到目标柱
-
其中第①步与第③步都可以进一步转化为\(n-1\)个盘的问题,第②步恒为1步
-
因此就得到了\(T(n)=T(n−1)∗2+1\)
即\(T(n)=2^n-1\)
-
-
骨牌覆盖
题目描述:
有2行n列的长方形方格,要求用n个1*2的骨牌铺满。有多少种铺法?
如n=3时有3种覆盖方法
输入格式:第一行输入一个正整数n(1<=n<=50)
输出格式:输出一个整数表示方案数。
样例输入:3
样例输出:3
- 1*2的只有一种
- 2*2的有两种
- 3*2的有三种(相当于拆成1*2与2*2两部分,求和)
- 4*2的有五种
- ……
所以我们很容易得出结论:这是一个斐波那契数列
再看一眼数据范围,很好不用高精度
(注意这里是从1,1开始的而不是从0,1,1开始)