虽然只做出了两道题,但是感觉总结还是非常有必要写的。
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的插值问题,看题解和代码是完全看不懂啊。。。下午再继续研究一下吧。