2016.10.07【初中部 NOIP提高组 】模拟赛C

来源:互联网 发布:ubuntu中查看文件夹 编辑:程序博客网 时间:2024/04/29 13:26

T1:

一道看似复杂时而简单的题目.

只要弄懂直线方程的含义以及运算就可以了.

任何一条直线,其方程为 ax+by+c=0

那么,如果要求y,just =-((ax+c)/b)

求 x,just =-((bx+c)/a)

懂得求一条直线上的x,y坐标后,我们可以发现,对于一个平面上的任意两点,一定可以通过一条直线间接到达.

那么,我们直接求出两点对应的在直线上的坐标,有四种到达的情况,分别求一下值取个最小就可以了,另外还有一种直接垂直到达的,也需要判断.


T2:

这是一道挺有意思的题目.

我们把题目给的原序列先排个序,找出原序列的每个数排序后所应该在的位置.

那么,对于每一个数,他都一定在某一“环”里.

THe mean is 它一定会有一个它需要到达的位置,那么它需要它到达的位置又有一个那个位置需要到达的位置.

以此类推,可以构成一个互相到达的环.

就算它不用动,也视作它自己是一个环.

把这个环找好后,我们可以知道每次换的时候一定是拿一个最小值去依次替换,较大值只换一次,最小值换n-1次.

那么,这里应该分两种策略:

第一种:拿这个环里的最小值去换.

第二种:拿整个序列的最小值去换.

两者的较小值肯定是所有策略的最小值,正确性显然.


T3:

虽然,这是考试我唯一水了分的题,本以为很难,其实不然.

你只需要明白一个性质:

a[i]<=12^10

也就是说a[i]它与其他数构成的gcd,要么是他自己,他么是他自己的因数,那他最多能构成多少个不同的gcd?

显然,log(a[i])个.

那么,具体如何操作呢?

我们每次枚举一个i代表以第i个数结尾.

之前能构成的gcd一定不多,那么,储存一个表,每次我们都把所有可能组成的gcd储存下来,并把接下来不可能出现的gcd删掉,然后删掉再重复的,以后拿着个表去更新gcd,反正个数已知不可能超过 log(a[i])个,很小。

时间复杂度估量一下大概——O(TN*logK)


T4:

也是需要点思维的 题目.

因为正推实在太繁琐,而最终的结果又知道了,为何不尝试一下逆推呢?啊?

逆推的话就真的very easy啦~

我们只需要知道一个性质:

任何时候先分裂再加一定比加了再分裂好.


所以,按照这个思路,我们可以得出如下结论:

任何时候,对于第i个数,只要>0,一定是减一,只要=0,一定得合并.

合并的意思就是把

所有当前为0的数 / 2 (取上整).

怎么判断当前这个数是否为0呢?

废话,如果这个数的值=x,那么不就当第x时刻的时候,x不就等于0了咯。

MDzz..


这一套题目的每道题都值的我好好消化,这次考的不好,但其实是件好事,因为考的越差,证明这套题目所掌握的知识也就越少,收获的知识自然就较多咯~~



0 0
原创粉丝点击