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

来源:互联网 发布:怎么看淘宝评价五星 编辑:程序博客网 时间:2024/06/05 03:03

题目:

https://jzoj.net/senior/#contest/home/1742


T1:输油管道.

这道题乍一看以为是搜索,就像我考试时打了足足300行代码最后一分未得,其实根本不用搜索,因为我们有智商。

我们可以想,当我们从起点一直延其方向往终点出发时(起、终点只有一个方向可以到达)我们一定会遇到一个被偷了的管道。

亦即,这个管道必定时答案需要输出的管道,至于为什么,仔细想想就会明白。并且当前我们已经知道这个管道的坐标,只需求这个管道的类型了。我们可以根据7种类型的组合规律得出当前需求管道的类型。例:这个管道的下和右有方向通往其,则类型就是‘1’,以此类推。

PS:因为只有一个被偷了的管道,并且这个管道的四周必定是“有一定规律”,所以我们可以直接枚举当前'.',然后判断这个'.'的四周的“规律”就可以得知。


T2:数码问题.

我们如果直接把n*n的矩阵记录出来,并随其改变行列,则会爆空间。所以,我们需利用智商。

因为题目只要求你求出1000个数变化行列后的规律,也就是暗示不需要把矩阵所有数都存好。我们可以把这1000个数的行列先存好,然后每次移动第i个数的行列坐标时,我们都把i+1~n的n-i个数依次移动其坐标(也就是说当前移动第i个数时把其余在第i个数移动时会被移动的数移动即可)这样就可以妥妥的ac...


T3:灌水.

题目大意:

给定n个人之间的关系,1表示朋友,0则代表不是。第一个人第一天会给他的朋友灌一次水,第二天所有人都需要给他的朋友灌水,如果这个人前一天被灌了偶数次水则给他的每个朋友灌两次水,如果被灌了奇数次水则给他的每个朋友灌一次水,最后输出h天之后所有人被灌水总量。


分析:

很明显,对于每一个人我们只需记录上一次被灌了奇数次水的人,因为只有灌了奇数次水的人才会改变别人的状态.

所以也可以看出这个暴力很好打,但是这种纯暴力的方法能AC吗?


因为这道题的n只有20,而h却为10^9,所以,对于每个人的状态来说,总共的状态只有2^20,是一个不大于2000000的数,所以,我们最多只需进行2000000个数,当h非常大的时候,可证一定有一个状态相等的情况,而这个状态相等的时候我们可以视作一个循环。因为状态相等,接下来的所有情况都是相等.


所以我们只需记录算出这个循环所带来的答案值即可,注意一些细节地方处理好就行了。


T4:开花.

题目大意:

在一个平面图形上,每一天会有规律的出现一些矩形,矩形的高度是天数,而所有边界的距离则有输出给出。现要你求出一个矩形放下去后与其他矩形相交的地方,统计其个数(提前是这个相交的地方以前没有相交过,且不能相交于端点时才记录个数)


分析:

如果用暴力的方法,时间复杂度为O(n²).


所以我们可以考虑用线段树来维护.


我们每次只需加上一个矩形左右两边界的值并减去左右两边先前被记录过的值则为一个矩形所能贡献的答案.


于是,我们记录好之后,还需把l+1~r-1的值都加上1,线段树只需开到1~100000{n}.



总结:这次比赛做的非常差,第一二题的暴力在考试时候打都只是差一点,然后第四题在打第一二题暴力因为都没打出来时就心慌了,连提交都没提交,我本来是想打完第二题暴力打第三题,然后最后回来改第一题。谁知第二题暴力没打对就全盘皆输了。

下次比赛一定要注意时间的问题,并且有时候如果题目一个方向做不出,就可以试一下另一方向,就似第一题。

0 0