A

一道映射(下文有可能会说成置换)好题,题面描述太恶心,纯纯傻逼阅读理解。

首先很容易发现后几种操作都是对数列的后两个数进行辗转相减法,所以如果一开始给的后两个数和当前数列的后两个数的\(gcd\)不相同,就不可能。

接着考虑,你至少要执行一次的第一个操作(题面规定也),我们从循环节的角度进行考虑,怎么计算呢?

首先说一下什么是循环节,看这个:

来自pz给的ppt,很好整,其实就是上下两个定义,回去我录个视频,方便理解。

那么你至少要搞一次第一次操作,其实就是把该数列置换后的结果变成平方。

那么如果存在一个完整的循环节(其实就是一个完整的序列)的平方是这个序列,那么答案其实就是成立的。

现在你考虑如何计算这个数列是否能开方,有一个关于置换的定理:

如果一个置换序列能被开平方,那么这个数列的循环节肯定不存在奇数个长度为偶数的循环节,那么其实就很好做了,只需要对当前序列疯狂的求出所有循环节,然后直接判断就ok了。

另外,要看好数据范围再memset!!!

贴一个yzh的复习笔记:

B

好题。

这题其实是原题,在大工VS辽实的T3里出现过,基本是一摸一样。

对于观看这个题解呢,我的理解是把两个结合起来观看,分别是 这个这个,结合起来看的话无论是从感官还是从方便理解来看都很舒服。

好了,接下来我们说一下这个题的思路。

你考虑,你在一段长度为\(m\)的区间里至少要选两个,最终要求结果最小,所以一段长度为\(m\)要选两个。

我们钦定状态\(dp_{i,j}\)表示最后选的汤圆的下标为\(i\),倒数第二个选的是\(j\)

你考虑怎么转移这个东西,显然得到一段公式:

\[dp_{i,j} = min(dp_{j,k})+a_i(i-m+1\le k \le j-1)
\]

那么你考虑这玩意怎么做优化,因为这个做法显然是\(O(n^3)\)的。

你考虑,对于\(dp_{i,j}\),他需要比较的是\(dp_{j,i-m+1}\to dp_{j,j-1}\);对于\(dp_{i+1,j}\),他需要比较的是\(dp_{j,i-m} \to dp_{j,j-1}\),欸,这个时候你会惊奇的发现,对于\(dp_{j,i-m+1} \to dp_{j,j-1}\)这一段,他的枚举是冗余的,这张图片会更好理解:



这就是优化的地方,你考虑,我记录一个\(res\),表示当前上端区间的最小值,而这段区间的最小值,其实就是\(min(res,dp_{j,i-m})\),那么就可以把枚举\(k\)这个步骤给省略了!

这个时候再明确一下枚举顺序就可以了!

你考虑,在求这个位置的最小值的时候,需要跟他前面的进行比较,所以,\(j\)需要从小到大进行枚举:for(int j = 1;j <= n;j++)

但是你考虑,对于枚举最小值的时候,他跟\(01\)背包的过程是类似的,如果你正着枚举的话,你有可能会重复,而且这玩意是一个类似滑动窗口的东西,所以你要倒着扫。

记得初始化并且取模!直接就滚动数组就可以解决这个题了。

D

先给几个前置知识:

  1. 快速计算斐波那契数列的通项公式:$$\sum_{i=1}^{n}F_i = F_{n+2}-1$$

    接下来我们给出证明。

    首先明确一个东西----数学归纳法:当一个等式在\(m\)下成立,推导过后\(m+1\)也成立,则该等式成立(注意,前提是在\(1\)的情况下他也成立)



    那么就好整了,当\(n = 1\)时这个式子显然是成立的,\(2-1 = 1\),

    那么引出有关\(m+1\)的等式:
\[\sum_{i=1}^{m+1} = \sum_{i=1}^{m}+F_{m+1}
\]

\(\;\;\;\;\;\;\;\)由结论:

\[\sum_{i=1}^{n}F_i = F_{n+2}-1
\]

\(\;\;\;\;\;\;\;\)得到:

\[\begin{aligned}
\sum_{i=1}^{m+1} &= \sum_{i=1}^{m}F_i+F_{m+1} \\ &= F_{m+2}+F_{m+1}-1\\
&=F_{m+3}-1
\end{aligned}
\]

\(\;\;\;\;\;\;\)则该式子在\(m+1\)与\(1\)下均成立,故此式子成立。

  1. 有关小球与盒子的公式:
\[ m^n = \sum_{i=1}^{m}S(n,i)C_{m}^{i} i!
\]

\(\;\;\;\;\;\;\)这个还是挺好理解的,前面那个是有\(n\)个不同小球放入\(m\)个不同盒子中,每个盒子可以为空。

\(\;\;\;\;\;\;\)后面那个\(S(n,i)\)就是斯特林数,他的意思就是从\(n\)个不同的小球放入\(m\)个相同的盒子,盒子不可以为空。那么意思就显然了


接下来我们把原来的式子推一下:

\[\begin{aligned}
&\sum_{i=1}^{n}(\sum_{m=1}^{r}F_i)!\times i! \times \sum_{l=0}^{i}\sum_{j=0}^{\sum_{t=1}^{r}F_t} \frac{S(K,i-l)}{l!}
\frac{S(i,\sum_{w=1}^{r}F_w-j)}{j!}
\\

=&\sum_{i=1}^{n}L! \times i! \times \sum_{l=0}^{i}\sum_{j=0}^{L}\frac{S(K,i-l)}{l!}\frac{S(i,L-j)}{j!}
\\
=&\sum_{i=1}^{n}\sum_{l=0}^{i}S(K,i-l)\frac{i!}{l!}\sum_{j=0}^{L}S(i,L-j)\frac{L!}{j!}
\end{aligned}
\]

那么这个时候怎么算呢,你考虑,\(\sum_{l=0}^{i}\)时\(S(K,i-l)\frac{L!}{l!}\)与\(S(K,l)\frac{L!}{(i-l)!}\)的结果显然时相同的,\(\sum_{j=0}^{L}S(i,L-j)\frac{i!}{j!}与\sum_{j=0}^{L}S(i,j)\frac{i!}{(L-j)!}\)相同,所以原式可以变化为:

\[\begin{aligned}
&\sum_{i=1}^{n}\sum_{l=0}^{i}S(K,i-l)\frac{i!}{l!}\sum_{j=0}^{L}S(i,L-j)\frac{L!}{j!}
\\
=&\sum_{i=1}^{n}\sum_{l=0}^{i}S(K,l)\frac{i!}{(i-l)!}\sum_{j=0}^{L}S(i,j)\frac{L!}{(L-j)!}
\end{aligned}
\]

这个时候你发现\(\frac{L!}{(i-l)!}\)和组合数是不是挺像的?

(组合数公式:\(C_{n}^{m} =\frac{n!}{m!(n-m)!}\))

是不是其实就是\(C_{i}^{l}\times l!\)?

另一个\(\frac{i!}{(L-j)!}\)同理。

故原式转换为:

\[\begin{aligned}
&\sum_{i=1}^{n}\sum_{l=0}^{i}S(K,l)\frac{i!}{(i-l)!}\sum_{j=0}^{L}S(i,j)\frac{L!}{(L-j)!}
\\
=&\sum_{i=1}^{n}\sum_{l=0}^{i}S(K,l)C_{i}^{l}\times l!\sum_{j=0}^{L}S(i,j)C_{L}^{j}\times j!
\end{aligned}
\]

那么这个时候你和前面那个前置知识\(2\)对比一下,发现式子可以转换为:

\[\sum_{i=1}^{n}i^KL^i
\]

其中\(S(n,m)\)为斯特林数,\(L\)为\(F_{n+2}-1\)

至此,我们便可以得到了这个题的\(30pts\)做法,我已经尽力了。

2024/10/2 CSP-S模拟赛的更多相关文章

  1. 【2018.10.20】noip模拟赛Day3 飞行时间

    今天模拟赛题目 纯考输入的傻逼题,用$scanf$用到思想僵化的我最终成功被$if$大法爆$0$了(这题只有一组$100$分数据). 输入后面那个$(+1/2)$很难$if$判断,所以我们要判两个字符 ...

  2. 【2018.10.18】noip模拟赛Day2 地球危机(2018年第九届蓝桥杯C/C++A组省赛 三体攻击)

    题目描述 三体人将对地球发起攻击.为了抵御攻击,地球人派出了 $A × B × C$ 艘战舰,在太 空中排成一个 $A$ 层 $B$ 行 $C$ 列的立方体.其中,第 $i$ 层第 $j$ 行第 $k ...

  3. 2016 10 26考试 NOIP模拟赛 杂题

    Time 7:50 AM -> 11:15 AM 感觉今天考完后,我的内心是崩溃的 试题 考试包 T1: 首先看起来是个贪心,然而,然而,看到那个100%数据为n <= 2000整个人就虚 ...

  4. 2018.8.10 提高B组模拟赛

    T1 阶乘 Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits Goto ProblemSet Description 有n个正 ...

  5. 10.25最后的模拟赛DAY1 answer

    QAQ太困了,大概说一下自己的思路: 其实这题很容易看错题目或是想错,就比如我个傻逼,一开始以为p+q一定等于n.... 咳咳...其实这题不用想太多,我们可以通过这n个字符串一个个假设正确或是不正确 ...

  6. 【2018.10.20】noip模拟赛Day3 二阶和

    今年BJ省选某题的弱化版…… 这看起来就没那么难了,有几种方法维护,这里提两种. 第一种(傻逼的我写的) 维护 一维&二维前缀和. 对于一个长度为$m$的序列$b_1,b_2,...,b_m$ ...

  7. 【2018.10.15】noip模拟赛Day1

    题面 wzj的题解 T1 随便搜 #include<bits/stdc++.h> #define ll long long using namespace std; inline int ...

  8. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  9. EZ 2018 06 10 NOIP2018 模拟赛(十八)

    好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...

  10. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

随机推荐

  1. Java核心编程-第一卷

    不要在程序中使用char类型 boolean: 两个值 true false 逻辑判断  整形布尔之间不能转换   

  2. Wetab新标签页:内置实用小组件的浏览器扩展,重新定义浏览器主页

    除了社交媒体,浏览器可能是我们日常工作.学习和生活中最常用的平台之一.然而,在使用浏览器的过程中,我们经常被书签管理.标签管理等问题所困扰.例如,书签栏混乱不堪,无法快速查找到所需书签. 为了和浏览器 ...

  3. redis-cli命令行工具使用

    redis 6.2.8 1.连接 ./redis-cli -h 127.0.0.1 -p 6379 -a admin@2020 -h redis主机地址 -a redis密码 -p redis端口 2 ...

  4. MFC状态栏的创建与添加进度条

    1.首先要创建状态栏 MFC中创建状态栏是用数组来分隔格子的.所以要先弄个数组 下面在自己继承的CWnd类.cpp文件中定义一个静态数组indicators static UINT indicator ...

  5. .proto文件的作用

    在网络通信和通用数据交换等应用场景中经常使用的技术是 JSON 或 XML,而在最近的开发中接触到了 Google 的 ProtoBuf. 在查阅相关资料学习 ProtoBuf 以及研读其源码之后,发 ...

  6. ES6中对数组的数据进行排序

    今天在工作中遇到了要对多选数据进行排序的一个功能,在此学习记录一下. 实现效果:点击左边的向下或者向上排序的按钮实现数据的排序. 选择第二个向下排序,结果如下: 具体方法如下: //找到原来需要排序的 ...

  7. 鸿蒙(HarmonyOS)实现隐私政策弹窗

    在实现用户协议弹窗时,通常我们会想到使用系统自定义弹窗,并在弹窗中点击跳转到Web页面.但在HarmonyOS中,由于系统弹窗的显示优先级高于其他组件,即使跳转到Web页面,弹窗依然会显示在最上层. ...

  8. Powershell 重新排列 Windows环境变量

    最近乱搞环境变量,然后有些重复了,遂写个脚本去重下排序下. 环境变量有长度限制,如果超出了,比如SqlServer相关的,将共同路径单独搞个变量声明下,比如 将其路径手动替换成如下,可大幅压缩变量长度 ...

  9. QT硬件异构计算

    QT硬件异构计算 使用AI技术辅助生成 1 QT硬件异构计算概述 1.1 硬件异构计算概念 1.1.1 硬件异构计算概念 硬件异构计算概念 <QT硬件异构计算>正文 硬件异构计算概念 在进 ...

  10. 记录一次BOOST库相关的使用包含互斥量、条件变量的类,引发的编译报错

    1. 工作中的代码: 2. 使用指针作为形参,不会造成编译报错,我是可以理解的. 那么请讨论下为什么使用值传递和引用作为形参,会造成编译报错? 3. 答案揭晓 boost 的mutex源码: 最终原因 ...