﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-wcwswswws的日记-随笔分类-ACM/ICPC</title><link>http://www.cppblog.com/wcwswswws/category/20423.html</link><description>wcwswswws</description><language>zh-cn</language><lastBuildDate>Sat, 16 Mar 2013 17:08:55 GMT</lastBuildDate><pubDate>Sat, 16 Mar 2013 17:08:55 GMT</pubDate><ttl>60</ttl><item><title>sgu320</title><link>http://www.cppblog.com/wcwswswws/archive/2012/02/23/166349.html</link><dc:creator>世界厕所所长</dc:creator><author>世界厕所所长</author><pubDate>Thu, 23 Feb 2012 10:03:00 GMT</pubDate><guid>http://www.cppblog.com/wcwswswws/archive/2012/02/23/166349.html</guid><wfw:comment>http://www.cppblog.com/wcwswswws/comments/166349.html</wfw:comment><comments>http://www.cppblog.com/wcwswswws/archive/2012/02/23/166349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wcwswswws/comments/commentRss/166349.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wcwswswws/services/trackbacks/166349.html</trackback:ping><description><![CDATA[sgu终于300了&#8230;&#8230;<br /><br />sgu320<br />题意：在n*m的土地上，一块连通的（上下左右）、且所占格数大于K的区域称为大区域。现在定义危险的格子：它们或者属于大区域，或者往上下左右任意方向走都必须经过同一块大区域。求危险格子数。<br /><br />bfs，假设每个格子四条边上都是管道，一个大区域构成边界的管道使其中一些管道被封闭，那么从土地边界上任意一点flood-fill一遍就可以得出所有大区域的边界。所有属于大区域的格子或四边管道有一边没有水的格子之和就是答案。<img src ="http://www.cppblog.com/wcwswswws/aggbug/166349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wcwswswws/" target="_blank">世界厕所所长</a> 2012-02-23 18:03 <a href="http://www.cppblog.com/wcwswswws/archive/2012/02/23/166349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sgu352</title><link>http://www.cppblog.com/wcwswswws/archive/2012/02/21/166184.html</link><dc:creator>世界厕所所长</dc:creator><author>世界厕所所长</author><pubDate>Tue, 21 Feb 2012 15:45:00 GMT</pubDate><guid>http://www.cppblog.com/wcwswswws/archive/2012/02/21/166184.html</guid><wfw:comment>http://www.cppblog.com/wcwswswws/comments/166184.html</wfw:comment><comments>http://www.cppblog.com/wcwswswws/archive/2012/02/21/166184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wcwswswws/comments/commentRss/166184.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wcwswswws/services/trackbacks/166184.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; &nbsp; 题意：王国有N个城市(1~N)，首都在1。已知有M条路，其中N-1条路构成一棵树T，保证从首都到所有节点的最短路都在这棵树上。现在要求每个节点在当树T上从1到该节点的路径的最后一条边坏掉的情况下的从1到它的最短路。<br /><br />&nbsp;&nbsp; &nbsp; &nbsp;LCA。对于每个节点v，题目所求的最短路或者是在它的子树T'外的点连一条边到它，或者是在它的子树T'外的点连一条边到T&#8216;中任意一点，延最初的最短路走到该点。这样，对于每个节点，处理每条与其相连的不在树T上的边。设边上另一点为u，则按照LCA(u,v)=i不同值建立不同的集合Ti。然后按照从1到v的路径的顺序来，每次在当前可使用的边选出最小值加上沿树T往上走到节点i的值去更新对于i的答案，同时把Ti中所有边置为可使用。<img src ="http://www.cppblog.com/wcwswswws/aggbug/166184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wcwswswws/" target="_blank">世界厕所所长</a> 2012-02-21 23:45 <a href="http://www.cppblog.com/wcwswswws/archive/2012/02/21/166184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sgu371+sgu381</title><link>http://www.cppblog.com/wcwswswws/archive/2012/02/20/166056.html</link><dc:creator>世界厕所所长</dc:creator><author>世界厕所所长</author><pubDate>Mon, 20 Feb 2012 05:02:00 GMT</pubDate><guid>http://www.cppblog.com/wcwswswws/archive/2012/02/20/166056.html</guid><wfw:comment>http://www.cppblog.com/wcwswswws/comments/166056.html</wfw:comment><comments>http://www.cppblog.com/wcwswswws/archive/2012/02/20/166056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wcwswswws/comments/commentRss/166056.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wcwswswws/services/trackbacks/166056.html</trackback:ping><description><![CDATA[sgu371<br />题意：<span class="Apple-style-span" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 15px; line-height: 19px; ">the city of S***的地铁有两种路线：一种是环线，环线由若干个环（节点数在3~10之间），所有的环构成一条链，每个环仅与其相邻的环有一个公共节点，且每个节点最多只能在2个环上，如此串成链；另一种是支线，每个环上的不是两环连接处的节点最多可以延伸一条支线。现在给出节点数N和边数M，求地铁建设方案。<br /><br />水题。多一环可多一边。先建环，后加点，最后加支线。<br /><br />sgu381<br />题意：给一个图，每条边e连接的两点u,v都有权值w(e,u)和w(e,v)。权值只有1和-1两种。有向图指的是每条边e上的权值积为-1。有一种操作是对于某个点v，对于所有e,若存在w(e,v)，则w(e,v)*=-1。求最少的操作使图变为有向。<br /><br />水题。当一个连通块上任意点确定是否执行操作后，整个连通块每个点是否执行操作就确定了。</span><img src ="http://www.cppblog.com/wcwswswws/aggbug/166056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wcwswswws/" target="_blank">世界厕所所长</a> 2012-02-20 13:02 <a href="http://www.cppblog.com/wcwswswws/archive/2012/02/20/166056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近比较倒霉+sgu539</title><link>http://www.cppblog.com/wcwswswws/archive/2011/11/30/161240.html</link><dc:creator>世界厕所所长</dc:creator><author>世界厕所所长</author><pubDate>Wed, 30 Nov 2011 09:56:00 GMT</pubDate><guid>http://www.cppblog.com/wcwswswws/archive/2011/11/30/161240.html</guid><wfw:comment>http://www.cppblog.com/wcwswswws/comments/161240.html</wfw:comment><comments>http://www.cppblog.com/wcwswswws/archive/2011/11/30/161240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wcwswswws/comments/commentRss/161240.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wcwswswws/services/trackbacks/161240.html</trackback:ping><description><![CDATA[昨天的topcoder由于电信的封网最后只拿了90分&#8230;&#8230;最低的一次&#8230;&#8230;<br /><br />sgu539其实是个水题，如果知道了最多只需2次交换就能使任意置换有序这一结论就好办了。证明最少只要2步有点多，但是如果是构造的话也很容易想的。<img src ="http://www.cppblog.com/wcwswswws/aggbug/161240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wcwswswws/" target="_blank">世界厕所所长</a> 2011-11-30 17:56 <a href="http://www.cppblog.com/wcwswswws/archive/2011/11/30/161240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>baby-step-giant-step</title><link>http://www.cppblog.com/wcwswswws/archive/2011/11/12/160003.html</link><dc:creator>世界厕所所长</dc:creator><author>世界厕所所长</author><pubDate>Sat, 12 Nov 2011 13:58:00 GMT</pubDate><guid>http://www.cppblog.com/wcwswswws/archive/2011/11/12/160003.html</guid><wfw:comment>http://www.cppblog.com/wcwswswws/comments/160003.html</wfw:comment><comments>http://www.cppblog.com/wcwswswws/archive/2011/11/12/160003.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wcwswswws/comments/commentRss/160003.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wcwswswws/services/trackbacks/160003.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; &nbsp;<span style="font-size: 12pt; ">Nov的codechef只做了4题&#8230;&#8230;真悲剧&#8230;&#8230;</span><br /><br /><span style="font-size: 12pt; ">&nbsp;&nbsp; &nbsp; LuCKYDAY的意思是这样的：给一个数据列s[1]=s,s[2]=b,s[i]=(x*s[i-1]+y*s[i-2]+z) mod p,p是质数且p&lt;10007。给定区间[l,r]，求l&lt;=k&lt;=r使s[k]=c的个数。</span><br /><span style="font-size: 12pt; ">&nbsp;&nbsp; &nbsp; &nbsp;这题我写了个p^2的裸的找环的，构造了一个将近10^8的环和20000组询问，两组时间我最后优化到只要6s多就行了，所以我估计那些最后花了将近20s的就是写的相当完美的了。</span><br /><span style="font-size: 12pt; ">&nbsp;&nbsp; &nbsp; &nbsp;其实这题标准的做法是借鉴了&nbsp;</span><span class="Apple-style-span" style="font-family: sans-serif; line-height: 24px; font-size: 12pt; ">Baby-step giant-step 策略。wiki上说的很详细了我也就不多说了。这题我们可以简化：求出环的大小，以及环中每个c的位置。这里只讨论x,y均不等于0的情况。定义向量f(i)=(s[i],s[i+1],1)和转移矩阵A，使得f(i+1)=A * f(i)。因为所有数都是对P取模的，讨论一下就知道环中所有元素都有唯一前驱和后继的，所以f(1)必定是环中的一个点，环的大小就变成求f(k+1)==f(1)的最小k，这与第2个问题是相似的。<br />&nbsp;&nbsp; &nbsp; 由题设知f(k+1)=A^k*f(1)，设k=i*m-j，其中m为环的长度的平方根（本题为p），0&lt;=j&lt;p，这样就变成了(A^m)^i*f(1)=A^j*f(k+1)。对于每个j的</span>A^j*f(k+1)可以先存下来（这里只要算p次），再计算等式左边 i 从1到p变化的结果（因为环最长为p^2），满足最小的那个 i 就是我们需要的，i*m-j就是我们要求的环的大小。其他问题就都好解决了。<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<img src ="http://www.cppblog.com/wcwswswws/aggbug/160003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wcwswswws/" target="_blank">世界厕所所长</a> 2011-11-12 21:58 <a href="http://www.cppblog.com/wcwswswws/archive/2011/11/12/160003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CF 91 一点记录。</title><link>http://www.cppblog.com/wcwswswws/archive/2011/10/28/159250.html</link><dc:creator>世界厕所所长</dc:creator><author>世界厕所所长</author><pubDate>Thu, 27 Oct 2011 17:48:00 GMT</pubDate><guid>http://www.cppblog.com/wcwswswws/archive/2011/10/28/159250.html</guid><wfw:comment>http://www.cppblog.com/wcwswswws/comments/159250.html</wfw:comment><comments>http://www.cppblog.com/wcwswswws/archive/2011/10/28/159250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wcwswswws/comments/commentRss/159250.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wcwswswws/services/trackbacks/159250.html</trackback:ping><description><![CDATA[又是算法想的出手速跟不上。纠结是d还是e也纠结了一会。把我想的算法贴一下，或许是我想的太挫了才导致没调对。<br /><br /><div><div>D的意思是：给你n(&lt;=10^5)个线段，有1种操作：某条线段[l,r]变成[l+1,r+1]或者[l-1,r-1]。最多操作k次。问最多能包含几个LN。</div><div>&nbsp;&nbsp; &nbsp;算法：</div><div>&nbsp;&nbsp; &nbsp;二分枚举答案(log(2^19))，对于每个答案，从左往右枚举合法区间，时间复杂度O(mlogm)。枚举前线段排序。对于每次右移，将需要右移才能包含的线段和需要左移包含的线段是可以只用一个数组记录的，每次左移对于已经在左边或右边不包含当前或移动到左边的值加入的结果维护是常数的。对于包含的情况用个小根堆维护，key为右端点。这样由于右到左就一次，所以时间复杂度为O(nlognlogm)。</div><div></div><div>&nbsp;&nbsp; E的意思是：给一个序列，两种操作：add l,r,d，a[l]~a[r]均+d；count l,r，a[l]~a[r]有几个LN。</div><div>&nbsp;&nbsp; &nbsp;算法：线段树。先将add按li排序，然后a从左往右扫描并维护包含当前点i的add值。这里用到第一个线段树，用来记录对该点有影响的add的线段以及该add起效后的情况。满足条件的LN大概有20个左右，我们用每个LN依次减去a[i]，然后在线段树中查等于该值的add以及下一个add，并将其构成线段集L。</div><div>&nbsp;&nbsp; &nbsp;然后是统计结果。这个问题本质上是：在平面上给你n个平行于x轴的线段，和m个平行于y轴的线段，让你统计有多少个交点。x轴是命令编号，y轴是线段的坐标。这就是个明显的线段树了。</div></div><img src ="http://www.cppblog.com/wcwswswws/aggbug/159250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wcwswswws/" target="_blank">世界厕所所长</a> 2011-10-28 01:48 <a href="http://www.cppblog.com/wcwswswws/archive/2011/10/28/159250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sgu512 Friendly Points</title><link>http://www.cppblog.com/wcwswswws/archive/2011/10/22/158874.html</link><dc:creator>世界厕所所长</dc:creator><author>世界厕所所长</author><pubDate>Sat, 22 Oct 2011 04:37:00 GMT</pubDate><guid>http://www.cppblog.com/wcwswswws/archive/2011/10/22/158874.html</guid><wfw:comment>http://www.cppblog.com/wcwswswws/comments/158874.html</wfw:comment><comments>http://www.cppblog.com/wcwswswws/archive/2011/10/22/158874.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wcwswswws/comments/commentRss/158874.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wcwswswws/services/trackbacks/158874.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; &nbsp;这道题还是浪费了一个上午&#8230;&#8230;太久没切题都忘了考虑long long了&#8230;&#8230;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp; &nbsp;题意：在平面上给出n个不同的点，如果一对点构成的矩形上没有其他点就算是友好点对。求一共有多少友好点对。n&lt;=10^5<div><div>&nbsp;&nbsp; &nbsp;solution：</div><div>&nbsp;&nbsp; &nbsp;分治。按x轴排序后分治，计算跨中线的点对。分成左右2边，都是从上到下排序的。我们考察右边的一点x，能和它组成友好点对的点具有单调性，具体的说就是从上往下看是单调递减，过了右边点x的高度后单调递增的，不在此序列中的点如果和x构成的矩形将包含一个序列内的点。如果我们只考虑单调递减的部分，那么左边的点可以用一个栈存。再考虑右边的点，我们还是只考虑在x上边的情况。能和x组成矩形的左边的点的上界要么为正无穷，要么就是在x所在的x坐标上或者左边的离轴最近的一点。这样，我们同样可以用一个栈去存。考虑在x下方的情况可以翻过来做，这样就解决了这个问题了。<br />&nbsp;&nbsp; &nbsp;&nbsp;<br />&nbsp;&nbsp; &nbsp; &nbsp;我知道我的表述可能有些问题，我就补充一下我想这题的思路好了：首先，我先发现了对于某个点，找他左边和他构成友好点对的点的单调性，想不到如何维护这个数据结构，但是想到如果我确定某条分割线之后线性维护栈来统计友好点的方法，最后把单调性和分割线这二个性质联系起来，就想到又有单调性又有分割线的分治了&#8230;&#8230;</div></div><img src ="http://www.cppblog.com/wcwswswws/aggbug/158874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wcwswswws/" target="_blank">世界厕所所长</a> 2011-10-22 12:37 <a href="http://www.cppblog.com/wcwswswws/archive/2011/10/22/158874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>