2014 暑假(清凉一夏) 题解(无Code)

来源:互联网 发布:mac怎么关闭系统更新 编辑:程序博客网 时间:2024/05/05 12:49

A题:

看懂题目了以后,果断的模拟(或者数学,或者二分)

按数表的排列顺序,会发现规律,从左下到右上来算一行,奇数项和偶数项分母和分子递增递减的不一样,我们求第n项,只需要求1+2+ ... + m 刚好大于n的项m,然后通过奇数项和偶数项的排列规律,就可以求出来了。

恩 传说这道题还可以用数学方法:额 具体的我就不推导(我也不会)直接给出公式 :m = (-1 + sqrt(1 + 8*n)) / 2。

然后可以二分,由于我们可以用n*(n + 1) / 2的方式算出前n项和,那么我们就可以通过这一方式来利用二分来进行猜数,如果公式算出来的数小于n,那么范围就可以缩小到start - mid之间,这样逐渐缩小范围,就可以快速的求出m。

ps:我还是比较仁慈的,只卡了数据范围,没有卡时间(如果卡时间的话,就只能二分和数学了)

int范围是:(1 << 31 ) - 1 ,没有到 1 << 32

B题:

就是比简单的最大串和麻烦了一点,需要用额外的数组记录一下开始的下标和结束的下标,然后直接输出就OK。对了还有判断一下,是否全是负数。

最大和这个就百度吧。。。。

C题:

简单宽搜:

在处理恶魔节点的时候,把此节点变成道路,但是并不走此节点,坐标不变,然后把步数加1,添加到队列里面。

关键代码:

struct Node{    int x;    int y;    int tep;    Node(int tx, int ty, int tep)    {        x = tx;        y = ty;        this -> tep = tep;    }    Node(){}};


......
if(mp[x][y] == 'x'){      mp[x][y] = '.';      Node p(x, y, tep + 1);      Q.push(p);      continue;}
.....
这样第一个搜到的第一个节点的步数就是最少步数。

D题:

这道题是小白(算法竞赛)里面的一道题,最大值最小化。

先用二分枚举,然后利用贪心是否能够进行分割。

二分枚举的是能够大于等于所有数的一个数,然后利用这个数,来对这个序列进行判断,看是否能够利用这个数来进行符合的划分。

贪心的策略是每次尽量向右划分,也就是左边的一组数超过或等于枚举出来的数,就算一次划分。

E题:

一道简单的数学题。

通过画图发现:如果横边正好整出a,那么我横着的瓷砖就可以拼m / a 块,如果横边不能正好整除a,那么横着的就摆上m/ a + 1 块,纵边同理。

那么需要的瓷砖就是 横边需要的数 * 纵边需要的数。

同样的, 数据是从1~1e9,如果相乘,超int。

F题:

额 应该算是博弈吧 还是算贪心?

对于每摞牌来说,要么是奇数,要么是偶数。

偶数时候:

两个各取一半,因为如果靠近小俞这边一半牌里面有很大的数,那小俞想取这张牌就比你简单的多(如果你不拿这摞的牌,那么小俞也可以同样的不取这摞的牌,那么你就不会去浪费步数取你根本取不到的牌。

奇数时候:

肯定有一方要多拿一张牌,那么谁拿走这张牌就由这张牌的大小顺序决定,(如果偶数的摞都取完了,取奇数的话,按照小俞先的顺序,那么这张中间的牌肯定是小俞拿,那么小俞肯定先拿这摞牌,来获取大的分数,然后中间这张就是你的了)。

所以先按顺序取所有的摞(除了中间的奇数摞的中间牌),把所有的中间牌,排一遍序,顺序取就可以了。

G题:

大数减法。。。。。

注意:

1.第一个数需要特别注意

2.不要有多余的0

3.结果是0的时候别忘了

H题:

唯一一道英格力士题。

看懂题意,其实就是找是否有一个2*2的地区是有3个以上同样颜色的块。

IQ = 英文能力





0 0