NOIP2016提高组初赛(C++语言)试题 个人的胡乱分析 Part 2.

洛谷秋令营day1模拟赛原地爆炸,心态崩了。于是打算写一下初赛题放松一下。

上次胡乱分析到了选择题,这次我想说说后面的题。

问题求解

T1.有一个1x8的方格图形,黑白两色填涂每个方格,两个黑格并不能相邻,求方案数。

我敢保证当时考场上要是没人跟我说这题是斐波那契数列打死我也想不起来。

当时我的做法是依次考虑填多少个黑格,比如说填0个黑格,有1种方法,填1个黑格,有8种方法,填2个黑格,3个黑格,4个黑格。。

因为方格只有8个,而黑格不能相邻,所以黑格不能填到4格以上,道理显然。

当时我可能是石乐志或者说是数重了,反正最后的数不是55。。

正解是这样讲的。

我们考虑只有一个格子的情况,只有两种填涂方案,可以记f(1) = 2;

然后考虑只有两个格子的情况,只有三种填涂方案,可以记f(2) = 3;

(诶,这俩方案里面应该都有 一个什么也不填的情况啊,这是不是重复啊)

不是。

然后考虑只有三个格子的情况,可以一个也不填,填一个在左,填一个在中,填一个在右,填两个在两侧,有5种情况,我们暂记f(3) = 5。

你能找到f(3)与f(1)和f(2)的关系吗?

我们回看一下f(1)和f(2),f(1)为该格填,或者不填,f(2)为填第一格,填第二格,或者不填。

有没有发现,f(3)中的某几种情况正好是f(1)或者f(2)?

那就对了。这便是递推式斐波那契的变种,既然总有f(n) = f(n-1) + f(n-2) (f(1) = 2,f(2) = 3),算f(8),会了吧。

T2.安排时间。这个题怎么说呢。。我没法说。。答案是3种,如果你要问我为啥是3种,我只能说事实就是这样。。。这个。。很难用很通俗的方法讲,啊反正就是随便找几个试试安排就好。就是找同时段能在一起考的科目,判断两科是不是可以一起考的依据就是看某个人是不是同时报了这两科,如果是同时报了那这两科就必须放在不同的时间段考。

读程题。

T1.恭喜你发现了noip2016初赛经典的卡逗号题!

(虽然我没被卡23333)

看main函数可以得知,这个算法的作用是把a数组倒过来存储,除了那个逗号,剩下的都是送分部分。

T2.恭喜你发现了noip2016初赛经典的卡逗号题!

(这尼玛是啥啊怎么这么长我怎么模拟)

我们大致可以看出这个题是跟万恶的字符串有关的。说实话,我是根据输入数据猜的输出。

也许是冥冥之中有感应,我发现输入数据有这么个小特点。

字符串都是被一个冒号分开的,左边那个串比较短,右边那个串比较长,但是你应该能发现左串和右串的关系。。就算你前两个看不出来第三个SARS也能提示的很明显了吧。。。

对,就是你想的那样,判断是不是“缩写”。。。

T3.需要靠脑回路的递归。。吗?并不是。。如果你知道lps什么意思。。

自己慢慢模拟吧。。注意记录一下中间结果,可以发现这个是判断最长回文子串的长度。。。

最长回文子串的英文缩写就是lps,所以当年有好多人直接秒掉了这道题。。。

T4.图论的味道(虽然输入数据是树)

这个真没什么好讲的。。给你一棵树,让你去掉某个节点以及相连的边,使得剩下的树里面最大的连通块所包含的节点最少,让你输出删去的节点号以及最大联通块包含的节点数。。

知道意思了就算不看代码手撸也能过。。所以真没啥好讲的。。。

上一篇:AutoLayout处理UITableView动态高度


下一篇:[How to] 动态布局可变高度的cell的应用