【2017年整理】ACM-DIY Group Contest 2011 Spring,结题报告.pdfVIP

【2017年整理】ACM-DIY Group Contest 2011 Spring,结题报告.pdf

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【2017年整理】ACM-DIY Group Contest 2011 Spring,结题报告

1001Centeur 首先求各个位置的sg 值,可以打表找规律,也可以参考 Thomas S. Ferguson 的《GAME THEORY》 At-Least-Half 可知各个位置的sg 值该位置编号的二进制位数,亦即sg值最大 为63。然后合并区间,统计各种sg值对应的已经确定是亮着的灯泡nim和。再统计各种sg 值对应的可变状态的灯泡数目。最后dp加快速幂求解所有亮着灯的nim和为0的状态数。 用f[i,j]表示sg值为0到i 所组成的nim和为j 的状态数。状态转移时用f[i,j] *k1 +f[i + 1,j] 更新f[i+1,j],用f[i,j] *k2 + f[i + 1, j^ (i + 1)] 更新f[i+1,j^(i + 1)],k1 为sg值为i+1 的位置 组合出nim和为0的情况数,k2 为sg值为i+1的位置组合出nim和为(i+1)的情况数。 1002HowManyHouGong 这是个有一定数据量的查询问题,一般可以用log的复杂度来搞。而log的复杂度基本上是 牵扯到某某树,这题也不例外,不过可以用简单的树状数组搞定(ym 用treap 以及其他神马 的)。 首先得分析一下Query的是什么东西,求sumF(v,val),我们可以进行一番推倒,可以通过累 加第 i 位出现 val 的次数来计算答案,容易发现这即是 sigma A1*A2...An * (1/A[j1] + 1/A[j2] ...), 其中val =A[ji]. 观察val =A[ji] 这个条件可以发现查询的是有序的子段,这 个很不错。我们很容易想到分开维护A1*A2...An 与(1/A[j1] + 1/A[j2] ...) 来解决这个查询。 我们先假设所有数都与P 互质,那么第一部分直接维护一个变量mul 即可,乘与除(逆)Ai 就可以维护了,而第二部分也可以直接用逆在一棵log树上维护即可,这里一种比较简单的 做法是离线将所有值离散化,然后直接套一个树状数组,对于修改操作即对应了删除与插入 两个动作。当然如果不想离散化的话,直接用其他更强大的树也行(不过我没有实现). 这样 做的复杂度是O(QlogN), 基本无压力,而数据规模应该已经将暴力维护前缀积与后缀积的 O(QN)的做法卡掉。 讨论到这里都是针对所有数与P 互质的前提,当存在数模P 为0 的时候,其实只是要特殊 考虑一些东西。首先,如果存在大于一维A[i] % P= 0,那么显然Query 的答案为0,当只 存在 一维A[i] % P= 0 时,则需比较A[i]与当前查询val 的大小关系,当不存在时则同上。注意 现在mul 与log树只维护那些A[i]%P!= 0的维即可。 讨论到现在都是针对模的数是素数的情况,那模不为素数可不可以搞呢?在10^9的规模下, 作者尝试使用一种偏码农的手段又加了一百来行代码,然后将复杂度上升了一个32 的常 数,基本可以工作,题目后续估计会挂在某个地方,有兴趣的可以继续ac~~~ 1003Ipad,IPhone 这题我的做法是,在Zp域内找到a,b的二次根(如果不存在,那么前面2项至少一个为0~~) 于是可以将sqrt(a),sqrt(b) 在Zp 下替换成整数,之后就是整数的加法和快速求幂了(指数是 马甲,只需要modp–1即可)。 于是本题也可以直接将指数modp–1,然后用递推关系来矩阵暴力……(-_-) 1004gxxs Problem 猥琐几何题 需要考虑下面这些情况 (1) 2个segment都是点 (2) 2个segment至少有1个点 (3) 2个segment部分重合 (4) 普通segment交(注意是分数输出) 1005Queryonatree 本题采用离线算法解决,关键在于对顺序的利用。 一开始将树上所有的边权置为负无穷,然后将所有询问和边放在一起从小到大排序,如果遇 到一条边,就将这条边的权赋回到树上的对应边上,这样询问到某个结点时,这个结点返回 的答案就应当是到根的路径上边权最大的一条,如果无解,那么返回的就会是负无穷。当然 动态维护到根的路径上边权最大的边还是不好做。 我们加入了一条边以后,Ans会变的点就是这条边下的子树,于是我们可以每次在加边时将 一棵子树的Ans值都赋为一个新值,然后当询问到这个结点时,就直接返回这个结点上的 Ans值。既然是一棵子树,那么就可以按照深度优先搜索顺序遍历树,按照入栈顺序把结点 放在一个线性表上,这样一棵子树在这个线性表上对应的结点就会是连续的,从而利用线段 树求解。 此外,本题使用递归的深度优先搜索容易爆栈,建议使用手写栈模拟递归。 时间复杂度O((

文档评论(0)

hhuiws1482 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档