读书人

ACdream群原创群赛(三)

发布时间: 2012-11-26 11:48:49 作者: rapoo

ACdream群原创群赛(3)

转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove

A:当时是暴力水过的,正解O(n)

如果存在b的某个排列使得 for_each( ai^x=bi )

那么我们将a1^x^b1^a2^x^b2……an^x^bn=0 ,我们在两边再同时^x

由于n为奇数,左边总共便有了偶数个x,抵消

变成a1^a2^……an^b1^b2……^bn=x

好喵,到了这里就解决了,将所有的a,b异或之后,再判断x是否为解


B:给出3个点(x1,y1),(x2,y2),(x3,y3),可以得到三角形面积abs((x3-x1)*(y2-y1)-(x2-x1)*(y3-y1))/2

显然和奇偶性有关,枚举六个数的奇偶性,然后判断

ans=(ans+((x1&1)?(n/2):((n+1)/2))%MOD*((x2&1)?(n/2):((n+1)/2))%MOD*((x3&1)?(n/2):((n+1)/2))%MOD*((y1&1)?(m/2):((m+1)/2))%MOD*((y2&1)?(m/2):((m+1)/2))%MOD*((y3&1)?(m/2):((m+1)/2)))%MOD;


C:当时是记忆化搜索过的,直接广搜也行


D:感觉好神的题目,思维跟不上。

可以得到这个式子,v(A)=∏a∈A(1+a)?∏a∈A(1?a)2

这个式子,刚好能把偶数项的抵消。。。

然后就是分别维护两部分就行了,求一下逆元什么的。貌似数据是multiset吧


E:状态压缩DP,dp[i]表示已经取的数的状态为i时的部分和。

s[i]表示i转换为二进制后1的个数,那么下一个数取的便是a[s[i]][j]。

C[k]=(A[1]+A[2]+?+A[k])?B[k]+(B[1]+B[2]+?+B[k])?A[k]?A[k]?B[k]

或者维护部分和,然后再枚举


H:带花树或者Tutte matrix算法,先留个坑。


I:tree_dp求一下子树的大小,如果是偶数就ans+1


J:数据水了,树DP+背包可以水过,对于链的数据会完T

考虑联通块不包括重心,则最多只能有n2的大小。于是就算包含重心的联通块的最小权值,有一个熟知的动态规划算法可以做到O(N2)。之后点分治即可。复杂度仍然是O(N2)。

"熟知的动态规划算法"可以参见何森的集训队论文。

-----ftiasch






读书人网 >编程

热点推荐