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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值