牛客网暑期ACM多校训练营(第一场)比赛总结

虽然只做出了两道题,但是感觉总结还是非常有必要写的。

1、针对J题,区间查询问题要先往线段树、树状数组这方面想,最后再想其他的,不要贪,还有思维灵活一些,早就该想到把区间转化为连续的一段了。这样再离线处理就很简单了。据说还可以用主席树或者莫队。。。针对树状数组离线处理的题目还有很多,这需要我们熟练掌握。

离线树状数组:HDU 4417 HDU 3874 LightOJ 1118 BZOJ 2743 SPOJ 3267

2、针对D题,符号比较多的题,理解清楚每个符号表达的意思再做,然后就是能否想到二进制编号hash去重的问题了。这种题目读清楚题意,理清思路的话模拟一遍应该就出来了,如果不对,应该先考虑细节的问题。(long long、初始化、某个字母写错等)

3、针对A题,虽然之前在徐州邀请赛做过本质一样的题,但是需要转弯,就是能否想到实质上就是求两条不相交的路径(可重合)总数。套Lindstrom-Gessel-Viennot lemma定理。答案是C(n+m,n)^2-C(n+m,m-1)*C(n+m,n-1) 这个结论已知在今年已经用了两次,2016年区域赛上用了两次。所以还是比较重要的

4、针对B题,参考题解:(by lifelikes)

题目给出的合法矩阵是一个类似与邻接矩阵的样式。 所以应该往这方面去考虑。 
每行之和等于2 , 代表每个点都连有两条边,可以有重边 不能有自环。 
这说明 每个点属于且仅属于一个环。 
因为输入只有一个n 
应该要往dp递推的方向上去想。

现在开始找递推式。 
定义dp[n]表示n个点构成的合法图的方案数。 
思考每加入一个新球,如何从已知状态转移。 
考虑从前面的n-1个球中选取一些球和新球组成一个环。 
特殊考虑只取一个旧球的情况, 
这种情况下这个旧球有n-1种方案 剩下的n-2个球组成的合法方案数已经求出。 
所以这种情况下 方案数为(n-1)f(n-1) 
推广到一般情况 
当我们取k个旧球与新球组成环时,旧球的取法有C(n-1,k) 取出的旧球与新球组成环的方案数有(n-1-k)!种 
但是考虑对称性 需要除以2。 又考虑到只取一个球的时候不需要考虑对称性 ,所以把这种情况单独摘出来考虑。 
最后得到 dp[n]的递推式就是 
dp[n] = (n-1) dp[n-2] + sigma(x:2->n-3)((n-1)!/(2*x!)dp[x]) 
但是这个东西有一个讨厌的sigma 我们可以通过相减的方法来消除这个sigma。

思路十分清晰,不过上述公式需要两边同乘n-1消sigma。最终结果为

dp[i]=(((dp[i-1]+dp[i-2])%m*(i-1)%m)-((i-1)*(i-2)/2)%m*dp[i-3]%m)%m;

至于F的插值问题,看题解和代码是完全看不懂啊。。。下午再继续研究一下吧。

猜你喜欢

转载自blog.csdn.net/lsd20164388/article/details/81128022