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

来源:互联网 发布:贪吃蛇寻路算法 编辑:程序博客网 时间:2024/06/05 07:11

T1:

这一题,

虽然自己写的太复杂.

虽然考试时因为一个加号而没检查出来从而爆0.

虽然看到别人十分钟就打好了,而我还在慢慢的调.

虽然……

但还是感觉自己的方法好理解233。


当然,这是最最智障、傻x、恶心的方法。

任何一个数,他的友好数对很明显只有他的位数那么多个。

则,我把一个数的友好数对所有求出来。

如果有n个,则这n个互为友好数对的数都有N-1个友好数对。

则这样子,可以线性求出1到n总共有多少个友好数对。

当然,还需减去1~l-1的友好数对。

但这里,不能直接减去友好数对个数,而需要减去1~l-1中所有可能影响友好数对的数。


怎么计算呢?

设一个数x,它的友好数对储存在w里。

对于w[i],如果<l 则inc(tot1)

如果<=r则inc(tot2)

那么对于x,他所能影响的友好数对为:

jc[tot2-1]-jc[tot2-tot1-1]

(jc[i]=1+2+……+i)


最后用1~r的总共友好数对,减去每一个被影响的友好数对的个数就行了。


另一种简单的方法就是:

你已经求出了友好数对了,直接判断这些友好数对的个数是否在[l..r]的区间不就行了,在这个区间就累加答案啊!

(我真tm是个智障)


T2:

step1:

因为题目要求路径必须对称,所以可以把矩阵上半部的每一个对应的数相加,于是到达对角线位置时,就可以视为走完全程且路径堆成了。

step2:

spfa把最短路求出.

step3:

bfs求路径数.


其中求路径数需要注意,对于

(x,y)=>(xx,yy)

要从(x,y)走到(xx,yy)(假设已是最短路径),则需要当前(xx,yy)四周的点所有能以最短路径到(xx,yy)的路径数仅剩当前这一条(x,y)到(xx,yy)的最短路径,才加入队列,否则只加上路径数,并把路径数减1。

(╮(╯▽╰)╭智障的我,听别人讲了五遍才明白,理解能力有待提高)


T3:

很容易想到用堆。

不过,需要用个模拟链表来判断一下当前每一个人的身旁是哪些人,然后就可以过了。

(对于不用模拟链表而暴力水过的,你牛逼)

0 0
原创粉丝点击