SRM 467

来源:互联网 发布:利达128eii主机编程 编辑:程序博客网 时间:2024/04/28 00:33

   这场比赛之悲剧。。跌了15分。。。。。

   250分写了半天依旧调不出第二个样例的,结果囧到500题目都没开的。。。。然后就挂0了的。。。。啥也不说了。。今天写了一天的TC了。。今天的这场除了DIV1的1000没写,其他都写了还学了两个好耍的东西。。。。

 

DIV1

 

250 暴力+小技巧

题意:一个学生等老师来上课的,但是他不知道老师啥时候会来的,然后他等waiting时间后觉得无聊就会出去转walking时间,回来等待waiting时间后老师没来就会再次出去。老师会在a...b区间时间任意时刻来,是等概率的。但是老师等t时间后,就会不会让你进来了的。让你求你进不去教室的概率是多少。

 

所有数据的范围都为1....10^9内的数的。

 

解法:1:可以直接枚举循环的时刻,去求他出去的时刻和老师来的时刻+t的区间的交。然后长度去除以总长度就是概率了的。注意处理边界条件可以只有一个时间点的情况,就不会挂了的。ST挂了很多人的。。。

     解法2 :因为那个同学很白,所以行动都是循环的,所以你只需要把老师的来到时间枚举起,然后看i ....i +t 这两个对waiting + walking取模,然后判断是否完全包含在waitng ...waiting + walking区间内就可以了的。注意点:注意边界,因为边界我一直调不过。老师来的区间a...b你从a+1....b去枚举。然后判断的时候,前端点不能重合,后端点可以重和,看下题意理解下就只WHY了。。。。

 

 

500 数学

题意:

SuperSum(0 , n) = n, for all positive n.
SuperSum(k , n) = SuperSum(k-1 , 1) + SuperSum(k-1 , 2) + ... + SuperSum(k-1 , n), for all positive k, n
给你K,N让你求supersum(k,n)%p;范围为1.....10^9

 

解法:1:你可以爆小数据,看出规律很像斜着的杨辉三角形。所以问题转换成为了C(N+K,K+1)的值.但是数据很大不是很好求的。所以要转换思想。先搁在这里,待会说。。。

           2:很强大的一个拟合方法,所有的多项式公式都可以如此方法去做,详情请参考:http://222.197.181.37/bbs/read.php?tid=670  这种方法也需要求组合数的。

           3:构造矩阵,快速求幂去做,队内一位大牛构造出来的矩阵。k为多少就构造多少阶的下三角全为1的矩阵去求n-1次幂。结果为最后的矩阵的最后一行的加和。至于如何构造,那只能说我们都很笨的想不到如此巧妙的方法了的。。。

 

如何去求大数的组合数去模一个素数。

首先一个定理就是:如果p为素数,对于任意的整数x , x^p-1=1(mod p )

然后乘法的一遍相乘一遍取模 ( a *b )%mod= (a %mod )* ( b *%mod)%mod;

所以( a/b )%mod = ((a %mod) *(1/b)%mod)%mod;

但是如何去求(1/b)%mod呢?看上面那个定理,左右同除以一个x   ----- x^p-2 = 1/x (mod p);

然后就很容易得解了的。快速求幂去求那个x^p-2然后就很容易求解了的。

但是如此方法只能算p为素数的情况下,不是素数的情况下,就没辙了的,需要继续学习的。

学完了会写一篇完整的文章的。。

 

 

 

1000 :依旧不敢开,因为早上一个房间的TARGET 大牛1000都写挂了的,估计我等凡夫俗子是做不出来的。。果断没开。。。

 

 

 

 

DIV2

 

250暴力;

就是DIV2 500的简化版,N , K 都是只有14的,所以你直接爆就可以了的,我直接贴了500的代码的。

 

500 :同DIV250的

哎,看来DIV2的500我还是不是每次都出的,弱的很啊。。。。路漫漫其修远兮。。。。。

 

1000 bfs暴力。

题意:就是给你n*m的矩阵,$ 代表你自己,#代表墙,.代表空格 F代表火。会每一秒都会想相邻的格子去蔓延,但是穿不透墙,问你最多可以坚持多少秒,如果可以永远坚持,就返回-1

 

解法:很暴力,跑2遍的BFS就可以了的。对于每一个F 去BFS他到每一个可以到达的格子的时间。这样处理完了就可以得到每个格子被火烧可以最早时间是多少。

然后就很简单了,直接BFS你可以坚持的不是就可以了的。格子是有墙不能去,有火到的时间比你的时间小的不能到达。然后BFS就可以了的

注意点:第二遍BFS不需要记录格子是否访问过,只需要有个DP数组记录下到达当前格子最久的持续时间,出队列了的就直接复制-1就可以了的。

然后如何处理返回-1情况,只要你求的的步数大于n*m就可以了的,因为最左上角的格子要蔓延到最右下角的格子的最长时间。

 

 

这场TC做的确是很囧,需要多加练习啊。。。。太弱了的。。。。。

原创粉丝点击