模拟赛总结(21.12.02)

  • 我先放两张图在这里()

总结

  1. 这是人生中第一次模拟赛,还是有一些地方不太细心,比如说

    《因为打错文件名而痛失100分这件事》

  2. 然后因为时间有限只有二十分钟导致三道题只能取舍着做(还是我菜

  3. 第一题计算系数,看了两眼,数学渣选择直接跳过(后来证明这个选择非常正确)

  4. 第二题汉诺塔,看到题目先想到的是“move 1 from a to c”这类的(其实这习惯不怎么好,毕竟万一在原题基础上稍加改动可能就被坑了),然后第二眼看见是输出最少步数,想到了\(2^n-1\)这个公式。

  5. 第三题骨牌覆盖,很简单的一道递归(斐波那契数列)题,一方面是做过,另一方面是对这类简单的、会用到斐波那契的问题已经稍微有了点直觉,知道了需要用斐波那契做,还有就是列举前几项,一看,诶嘿我会了

    但是如果看我的代码会发现,我写了个高精度......为什么呢,因为我测边界数据发现int不行,又拿long long去试,然后我printf里面的%d忘改了。。。忘。改。了。o(≧口≦)o

    然后我一看好家伙这么麻烦还得写高精,寻思了一下,写了个结构体高精加的函数没办法,拿着锤子看什么都像钉子(?......这么一搞,我感觉多耗了一倍还多的时间

教训

  1. 文件名、固定输出一定直接复制,再不济也要检查一下

  2. 改变量类型的时候记得想一下有没有printf里面的输出类型没改

题解

  1. 计算系数

    题目描述:给定一个多项式\((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\)

    算就完了

    别忘了取模

  2. 汉诺塔

    题目描述:

    汉诺塔由编号为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\)

    这个公式的来历:

    1. 因为每次操作的函数里面都有三个操作:①从原柱移到过渡柱上②将底盘移到目标柱③从过渡柱移到目标柱

    2. 其中第①步与第③步都可以进一步转化为\(n-1\)个盘的问题,第②步恒为1步

    3. 因此就得到了\(T(n)=T(n−1)∗2+1\)

      \(T(n)=2^n-1\)

  3. 骨牌覆盖

    题目描述:

    有2行n列的长方形方格,要求用n个1*2的骨牌铺满。有多少种铺法?

    如n=3时有3种覆盖方法

    输入格式:第一行输入一个正整数n(1<=n<=50)

    输出格式:输出一个整数表示方案数。

    样例输入:3

    样例输出:3

    1. 1*2的只有一种
    2. 2*2的有两种
    3. 3*2的有三种(相当于拆成1*2与2*2两部分,求和
    4. 4*2的有五种
    5. ……

    所以我们很容易得出结论:这是一个斐波那契数列

    再看一眼数据范围,很好不用高精度

    (注意这里是从1,1开始的而不是从0,1,1开始)

posted @ 2021-12-02 23:56  Burnling  阅读(53)  评论(0编辑  收藏  举报