<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_magicdlf's blog</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/33086/rss</id><updated>2011-11-08T15:41:33Z</updated><author><name>magicdlf</name><uri>http://www.cnblogs.com/magicdlf/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/magicdlf/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/33086/rss"/><entry><id>http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM518.html</id><title type="text">SRM 518 解题报告</title><summary type="text">这是一篇后来补上的报告，比赛没参加，没有故事好讲。 250pt: 定义将一个串删除一些字母后得到的串为其子串，问给定一个串，求其所有的子串中的最大字典序子串。比如test的最大字典序子串为tt。 由于是求字典序最大的子串，第一个字母肯定是该串中所有字母中最大的那个。然后在剩下的子串里，继续求最大字典序子串。就是这么个一路贪心下去的算法。 500pt: 有一个序列x0,x2…xn-1，如果满足对所有的1&lt;=i&lt;=n-2，有x[i-1]+x[i+1]&gt;=2*x[i]，则称这个序列是凸的。现在给定一个序列a，可以用一个操作使a[i]--，问一共需要多少可操作才能把序列a变成一个凸序</summary><published>2011-11-08T15:39:00Z</published><updated>2011-11-08T15:39:00Z</updated><author><name>magicdlf</name><uri>http://www.cnblogs.com/magicdlf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM518.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM518.html"/><content type="html">&lt;div&gt;  &lt;p&gt;这是一篇后来补上的报告，比赛没参加，没有故事好讲。&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;250pt: &lt;span style="font-family: 宋体;"&gt;定义将一个串删除一些字母后得到的串为其子串，问给定一个串，求其所有的子串中的最大字典序子串。比如&lt;/span&gt;test&lt;span style="font-family: 宋体;"&gt;的最大字典序子串为&lt;/span&gt;tt&lt;span style="font-family: 宋体;"&gt;。&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: 宋体;"&gt;由于是求字典序最大的子串，第一个字母肯定是该串中所有字母中最大的那个。然后在剩下的子串里，继续求最大字典序子串。就是这么个一路贪心下去的算法。&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;500pt: &lt;span style="font-family: 宋体;"&gt;有一个序列&lt;/span&gt;x0,x2&amp;#8230;xn-1&lt;span style="font-family: 宋体;"&gt;，如果满足对所有的&lt;/span&gt;1&amp;lt;=i&amp;lt;=n-2&lt;span style="font-family: 宋体;"&gt;，有&lt;/span&gt;x[i-1]+x[i+1]&amp;gt;=2*x[i]&lt;span style="font-family: 宋体;"&gt;，则称这个序列是凸的。现在给定一个序列&lt;/span&gt;a&lt;span style="font-family: 宋体;"&gt;，可以用一个操作使&lt;/span&gt;a[i]--&lt;span style="font-family: 宋体;"&gt;，问一共需要多少可操作才能把序列&lt;/span&gt;a&lt;span style="font-family: 宋体;"&gt;变成一个凸序列？&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: 宋体;"&gt;观察这个序列，如果把相邻点之间的差值算出来，这个差值的序列肯定是一路递增的（可以相等）。然后可以发现这样的序列肯定会有一个最低点，然后把最低点和其他所有点连线，这个连线不能和原来的函数曲线有交点。也就是说，如果把这个序列的任意两点连起来，在这两点中间的所有点，必须低于这两点的连线。于是就有了一个很暴力的解法，枚举所有的非相邻点对，检验两点间的所有点是不是高过这两点的连线，如果有就裁掉。重复以上过程一直到没有点被裁掉为止。&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;1000pt: 待补上。&lt;img src="http://www.cnblogs.com/magicdlf/aggbug/2241855.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM518.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM522.html</id><title type="text">SRM 522 解题报告</title><summary type="text">早起起来赶TC，工作日早上9点的这场SRM是最容易睡过头的。注册时发现panda教主已经注册了，Petr还没来。但事实的情况是比赛开始时Petr来了，panda教主迟到。 打开题目发现是250和450，预感过500pt的机会来了。果然生平第二次过了SRM的500pt，尽管是一道简单的。总的来说两道题都是想的成份比较多，实现相对简单，今天一共就写了十几行代码就完事了。由于RP大爆发，取得了前所未有的21名的排位，rating也顺势涨到了1888，创出历史新高，还顺带赢了panda教主一场。话说neal_wu非常神奇，coding phase结束的时候，我领先了他225分，但是在challe...</summary><published>2011-11-08T15:34:00Z</published><updated>2011-11-08T15:34:00Z</updated><author><name>magicdlf</name><uri>http://www.cnblogs.com/magicdlf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM522.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM522.html"/><content type="html">&lt;div&gt;  &lt;p&gt;&lt;span style="font-family: 宋体;"&gt;早起起来赶&lt;/span&gt;TC&lt;span style="font-family: 宋体;"&gt;，工作日早上&lt;/span&gt;9&lt;span style="font-family: 宋体;"&gt;点的这场&lt;/span&gt;SRM&lt;span style="font-family: 宋体;"&gt;是最容易睡过头的。注册时发现&lt;/span&gt;panda&lt;span style="font-family: 宋体;"&gt;教主已经注册了，&lt;/span&gt;Petr&lt;span style="font-family: 宋体;"&gt;还没来。但事实的情况是比赛开始时&lt;/span&gt;Petr&lt;span style="font-family: 宋体;"&gt;来了，&lt;/span&gt;panda&lt;span style="font-family: 宋体;"&gt;教主迟到。&lt;/span&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;span style="font-family: 宋体;"&gt;打开题目发现是&lt;/span&gt;250&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;450&lt;span style="font-family: 宋体;"&gt;，预感过&lt;/span&gt;500pt&lt;span style="font-family: 宋体;"&gt;的机会来了。果然生平第二次过了&lt;/span&gt;SRM&lt;span style="font-family: 宋体;"&gt;的&lt;/span&gt;500pt&lt;span style="font-family: 宋体;"&gt;，尽管是一道简单的。总的来说两道题都是想的成份比较多，实现相对简单，今天一共就写了十几行代码就完事了。由于&lt;/span&gt;RP&lt;span style="font-family: 宋体;"&gt;大爆发，取得了前所未有的&lt;/span&gt;21&lt;span style="font-family: 宋体;"&gt;名的排位，&lt;/span&gt;rating&lt;span style="font-family: 宋体;"&gt;也顺势涨到了&lt;/span&gt;1888&lt;span style="font-family: 宋体;"&gt;，创出历史新高，还顺带赢了&lt;/span&gt;panda&lt;span style="font-family: 宋体;"&gt;教主一场。话说&lt;/span&gt;neal_wu&lt;span style="font-family: 宋体;"&gt;非常神奇，&lt;/span&gt;coding phase&lt;span style="font-family: 宋体;"&gt;结束的时候，我领先了他&lt;/span&gt;225&lt;span style="font-family: 宋体;"&gt;分，但是在&lt;/span&gt;challenge phase&lt;span style="font-family: 宋体;"&gt;他大杀四方，连&lt;/span&gt;cha&lt;span style="font-family: 宋体;"&gt;成功&lt;/span&gt;6&lt;span style="font-family: 宋体;"&gt;个，并且这是本房间有且仅有的六个错误提交，于是我只能眼看着大好局势拱手让人。&lt;/span&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/magicdlf/%E6%9C%AA%E5%91%BD%E5%90%8D1.JPG" border="0" /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;  &lt;p align="left"&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/magicdlf/%E6%9C%AA%E5%91%BD%E5%90%8D2.JPG" border="0" /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;span style="font-family: 宋体;"&gt;流水账毕，以下是详细的题解：&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;250pt: &lt;span style="font-family: 宋体;"&gt;转换一下题意，大致是：有&lt;/span&gt;n&lt;span style="font-family: 宋体;"&gt;个&lt;/span&gt;(2&amp;lt;=n&amp;lt;=14)&lt;span style="font-family: 宋体;"&gt;被涂成&lt;/span&gt;A&lt;span style="font-family: 宋体;"&gt;或&lt;/span&gt;B&lt;span style="font-family: 宋体;"&gt;的格子，&lt;/span&gt;Alice&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;Bob&lt;span style="font-family: 宋体;"&gt;每次轮流从这些格子里面拿走连续的一些格子（但是不能拿走所有的格子）。最后剩下的格子如果是&lt;/span&gt;A&lt;span style="font-family: 宋体;"&gt;，那么&lt;/span&gt;Alice&lt;span style="font-family: 宋体;"&gt;就获胜了，反之&lt;/span&gt;Bob&lt;span style="font-family: 宋体;"&gt;获胜。每次都是&lt;/span&gt;Alice&lt;span style="font-family: 宋体;"&gt;先行动，问给定初始状态，在理想情况下，谁能获取游戏的胜利。&lt;/span&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;span style="font-family: 宋体;"&gt;首先思考初始情况，很显然，如果第一个字母是&lt;/span&gt;A&lt;span style="font-family: 宋体;"&gt;的话，&lt;/span&gt;Alice&lt;span style="font-family: 宋体;"&gt;必胜，因为她可以把剩下的字符串都拿掉，只留下&lt;/span&gt;A&lt;span style="font-family: 宋体;"&gt;。同理，如果最后一个字母是&lt;/span&gt;A&lt;span style="font-family: 宋体;"&gt;的话，也是&lt;/span&gt;Alice&lt;span style="font-family: 宋体;"&gt;胜。于是，只有当两端字母同时都是&lt;/span&gt;B&lt;span style="font-family: 宋体;"&gt;时，才能轮到&lt;/span&gt;Bob&lt;span style="font-family: 宋体;"&gt;行动。在这种情况下，&lt;/span&gt;Alice&lt;span style="font-family: 宋体;"&gt;有两种策略，&lt;/span&gt;1&lt;span style="font-family: 宋体;"&gt;是拿走一端的&lt;/span&gt;B&lt;span style="font-family: 宋体;"&gt;以及和它连着的若干个其他字符，如此，&lt;/span&gt;Bob&lt;span style="font-family: 宋体;"&gt;下次行动时只要拿走剩余的所有字符，留下另一端的&lt;/span&gt;B&lt;span style="font-family: 宋体;"&gt;即可获胜。&lt;/span&gt;2&lt;span style="font-family: 宋体;"&gt;是&lt;/span&gt;Alice&lt;span style="font-family: 宋体;"&gt;不动两端的&lt;/span&gt;B&lt;span style="font-family: 宋体;"&gt;，在中间截取一段。如此，局面会变成类似于&lt;/span&gt;BXXX___XXXXB (&lt;span style="font-family: 宋体;"&gt;也可能没有&lt;/span&gt;X)&lt;span style="font-family: 宋体;"&gt;。&lt;/span&gt;Bob&lt;span style="font-family: 宋体;"&gt;的策略也很简单，把其中的一段&lt;/span&gt;XXX&lt;span style="font-family: 宋体;"&gt;拿走，剩下一个端点&lt;/span&gt;B&lt;span style="font-family: 宋体;"&gt;。接下来如果&lt;/span&gt;Alice&lt;span style="font-family: 宋体;"&gt;拿走单个&lt;/span&gt;B&lt;span style="font-family: 宋体;"&gt;，&lt;/span&gt;Bob&lt;span style="font-family: 宋体;"&gt;就获胜，如果&lt;/span&gt;Alice&lt;span style="font-family: 宋体;"&gt;在右边那串里拿，&lt;/span&gt;Bob&lt;span style="font-family: 宋体;"&gt;只要想办法尽快把那串拿完就能获胜（如果&lt;/span&gt;Alice&lt;span style="font-family: 宋体;"&gt;试图把右边的串分成两段，&lt;/span&gt;Bob&lt;span style="font-family: 宋体;"&gt;就拿走两段中的一段，直到剩下的串拿完为止）。于是，程序只有两行：&lt;/span&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;span&gt;if(cells[0]==&amp;#8217;A&amp;#8217; || cells[cells.size()-1]==&amp;#8217;A&amp;#8217;) return &amp;#8220;Alice&amp;#8221;;&lt;/span&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;span&gt;else return &amp;#8220;Bob&amp;#8221;;&lt;/span&gt;&lt;/p&gt;  &lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;  &lt;p align="left"&gt;450pt: &lt;span style="font-family: 宋体;"&gt;给你一个错误的等式&lt;/span&gt;a*b=c (a,b,c&lt;span style="font-family: 宋体;"&gt;都为&lt;/span&gt;1 &amp;#8211; 10^9&lt;span style="font-family: 宋体;"&gt;的正整数&lt;/span&gt;)&lt;span style="font-family: 宋体;"&gt;，将其修正为正确的等式&lt;/span&gt;A+B=C&lt;span style="font-family: 宋体;"&gt;，使得&lt;/span&gt;&lt;span&gt; | A-a | + | B-b | + | C-c | &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;最小。求出这个最小值。&lt;/span&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;span style="font-family: 宋体;"&gt;如果做过上海赛区&lt;/span&gt;hl&lt;span style="font-family: 宋体;"&gt;大神的&lt;/span&gt;A&lt;span style="font-family: 宋体;"&gt;题，看到这题的时候一定会觉得很熟悉吧。&lt;/span&gt;a,b,c&lt;span style="font-family: 宋体;"&gt;的范围都大到吓人，直接枚举肯定会挂掉。所以此题肯定是要用某一种&lt;/span&gt;trick&lt;span style="font-family: 宋体;"&gt;，将&lt;/span&gt;10^9&lt;span style="font-family: 宋体;"&gt;的问题简化为复杂度更小的问题。&lt;/span&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;span style="font-family: 宋体;"&gt;首先来看要枚举的变量，假定我们通过枚举确定了&lt;/span&gt;A&lt;span style="font-family: 宋体;"&gt;，这时，随着&lt;/span&gt;B&lt;span style="font-family: 宋体;"&gt;的变化，我们的&lt;/span&gt;&lt;span&gt;diff = | A-a | + | B-b | + | C-c | &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;有且仅有一个极小值，而且这个极小时会出现在&lt;/span&gt;C&lt;span style="font-family: 宋体;"&gt;接近于&lt;/span&gt;c&lt;span style="font-family: 宋体;"&gt;的地方。所以我们只须试验&lt;/span&gt;B=c/A&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;B=c/A+1&lt;span style="font-family: 宋体;"&gt;这两个值就可以算出当前&lt;/span&gt;A&lt;span style="font-family: 宋体;"&gt;的最小&lt;/span&gt;diff&lt;span style="font-family: 宋体;"&gt;值了。现在我们有了一个&lt;/span&gt;O(10^9)&lt;span style="font-family: 宋体;"&gt;的算法，即枚举&lt;/span&gt;A=1&amp;#8230;10^9&lt;span style="font-family: 宋体;"&gt;，通过上述办法计算最小的&lt;/span&gt;diff&lt;span style="font-family: 宋体;"&gt;值。前面提到的上海赛区的&lt;/span&gt;A&lt;span style="font-family: 宋体;"&gt;題的技巧就在这里出现了：由于&lt;/span&gt;A*B = C&lt;span style="font-family: 宋体;"&gt;，事实上&lt;/span&gt;A&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;B&lt;span style="font-family: 宋体;"&gt;里面总有一个是小于等于&lt;/span&gt;sqrt(C)&lt;span style="font-family: 宋体;"&gt;的，只需要枚举小的那个数就可以了，这样复杂度就降低为&lt;/span&gt;O(sqrt(10^9))&lt;span style="font-family: 宋体;"&gt;了。实现的话，首先看&lt;/span&gt;a&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;b&lt;span style="font-family: 宋体;"&gt;的大小，如果&lt;/span&gt;a&amp;gt;b&lt;span style="font-family: 宋体;"&gt;的话就&lt;/span&gt;swap&lt;span style="font-family: 宋体;"&gt;一下。枚举的时候暴力一点，直接枚举&lt;/span&gt;1&lt;span style="font-family: 宋体;"&gt;到&lt;/span&gt;40000&lt;span style="font-family: 宋体;"&gt;而不要去计算&lt;/span&gt;sqrt(c)&lt;span style="font-family: 宋体;"&gt;会避免很多麻烦，还有所有的计算结果用&lt;/span&gt;long long&lt;span style="font-family: 宋体;"&gt;来保存以避免乘法的时候溢出，应该就可以过了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1000pt: 不会 &amp;gt;.&amp;lt; 以后补上 &lt;br /&gt;&lt;/p&gt;  &lt;/div&gt;&lt;img src="http://www.cnblogs.com/magicdlf/aggbug/2241849.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM522.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM521.html</id><title type="text">SRM 521 解题报告</title><summary type="text">听说这一轮是TCO的备用题，所以潘达教主悲剧地不能参加了。戴牛展现出了惊人的实力，勇夺第八，rating暴涨。250pt是一个很水的贪心题，500pt是一个有一些trick的暴力题，但是由于一些细节的原因，比赛的时候没有做出来。 以下是详细的报告： 250pt: 给定一个string，包括一串未匹配的括号对()，问要将这些括号匹配至少需要添加多少个括号。括号匹配类问题里最简单的一个问题了。假设在某个位置出现了一个右括号’)’而之前没有足够的左括号，则需要在它之前添加一个左括号，位置不限。假设以上条件满足，在串结束的时候发现左括号数比右括号数多（包括添加的左括号），则需要补全相应的右...</summary><published>2011-11-08T14:19:00Z</published><updated>2011-11-08T14:19:00Z</updated><author><name>magicdlf</name><uri>http://www.cnblogs.com/magicdlf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM521.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM521.html"/><content type="html">&lt;div&gt;  &lt;p&gt;&lt;span style="font-family: 宋体;"&gt;听说这一轮是&lt;/span&gt;TCO&lt;span style="font-family: 宋体;"&gt;的备用题，所以潘达教主悲剧地不能参加了。戴牛展现出了惊人的实力，勇夺第八，&lt;/span&gt;rating&lt;span style="font-family: 宋体;"&gt;暴涨。&lt;/span&gt;250pt&lt;span style="font-family: 宋体;"&gt;是一个很水的贪心题，&lt;/span&gt;500pt&lt;span style="font-family: 宋体;"&gt;是一个有一些&lt;/span&gt;trick&lt;span style="font-family: 宋体;"&gt;的暴力题，但是由于一些细节的原因，比赛的时候没有做出来。&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: 宋体;"&gt;以下是详细的报告：&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;250pt: &lt;span style="font-family: 宋体;"&gt;给定一个&lt;/span&gt;string&lt;span style="font-family: 宋体;"&gt;，包括一串未匹配的括号对&lt;/span&gt;()&lt;span style="font-family: 宋体;"&gt;，问要将这些括号匹配至少需要添加多少个括号。括号匹配类问题里最简单的一个问题了。假设在某个位置出现了一个右括号&lt;/span&gt;&amp;#8217;)&amp;#8217;&lt;span style="font-family: 宋体;"&gt;而之前没有足够的左括号，则需要在它之前添加一个左括号，位置不限。假设以上条件满足，在串结束的时候发现左括号数比右括号数多（包括添加的左括号），则需要补全相应的右括号。算法就是基于以上两条原则进行贪心，用&lt;/span&gt;left&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;right&lt;span style="font-family: 宋体;"&gt;变量来统计当前的左括号数和右括号数，视情况添加括号即可。&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;500pt: &lt;span style="font-family: 宋体;"&gt;在平面上有最多&lt;/span&gt;40&lt;span style="font-family: 宋体;"&gt;个点，现在用一个大小范围在&lt;/span&gt;nlow&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;nhigh&lt;span style="font-family: 宋体;"&gt;之间正方形去选取这些点，每一次选取可以不同的点集。问一共有多少个这样的点集。点坐标的范围&lt;/span&gt;-10e8&lt;span style="font-family: 宋体;"&gt;到&lt;/span&gt;10e8&lt;span style="font-family: 宋体;"&gt;，&lt;/span&gt;nlow&lt;span style="font-family: 宋体;"&gt;和&lt;/span&gt;nhigh&lt;span style="font-family: 宋体;"&gt;的范围&lt;/span&gt;1&lt;span style="font-family: 宋体;"&gt;到&lt;/span&gt;10e8&lt;span style="font-family: 宋体;"&gt;。这一题比较阴险的一个地方在于，如果要枚举所有的点集，那么一共会有&lt;/span&gt;2^40&lt;span style="font-family: 宋体;"&gt;个不同的点集，而函数的返回值也暗示了这一点，而事实上可能的组合大约只有&lt;/span&gt;(2n)^2&lt;span style="font-family: 宋体;"&gt;种，这一点可以由一维的情况推广而知。假设在一维的轴上有若干个点，用一个矩形去选取不同的点的集合，我们发现，能选取到的只有连续的点集，推广到二维上亦是如此。将所有的点离散化后，我们得到一个&lt;/span&gt;N*N&lt;span style="font-family: 宋体;"&gt;的矩阵，我们枚举这些矩阵，使其满足边长大于等于&lt;/span&gt;nlow&lt;span style="font-family: 宋体;"&gt;并且小于等于&lt;/span&gt;nhigh&lt;span style="font-family: 宋体;"&gt;、且可以构成正方形。将这样的正方形能选取的点集存入一个&lt;/span&gt;set&lt;span style="font-family: 宋体;"&gt;，最后只需要统计&lt;/span&gt;set&lt;span style="font-family: 宋体;"&gt;内元素的个数即可了。算法的复杂度&lt;/span&gt;O(40^4)&lt;span style="font-family: 宋体;"&gt;。&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;1000pt: &lt;span style="font-family: 宋体;"&gt;用&lt;/span&gt;1*2&lt;span style="font-family: 宋体;"&gt;的砖块堆一个烟囱，每一层用四块砖，每块砖必须放在两块砖的结合处之上。问要砌一个&lt;/span&gt;n (n&amp;lt;10e18)&lt;span style="font-family: 宋体;"&gt;的烟囱，有多少种不同的砌砖顺序。枚举每一层可能出现的砖块排列情况作为&lt;/span&gt;dp&lt;span style="font-family: 宋体;"&gt;的状态，手算推出状态间转移的方程，得到一个&lt;/span&gt;O(N)&lt;span style="font-family: 宋体;"&gt;的算法。然后用矩阵乘的性质，对这个算法进行加速，类似于快速幂乘法的原理。具体的推算过程请见官方&lt;/span&gt;editorial:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://apps.topcoder.com/wiki/display/tc/SRM+521"&gt;http://apps.topcoder.com/wiki/display/tc/SRM+521&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;/p&gt;  &lt;/div&gt;&lt;img src="http://www.cnblogs.com/magicdlf/aggbug/2241753.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/magicdlf/archive/2011/11/08/SRM521.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/magicdlf/archive/2009/05/25/ChatRoom.html</id><title type="text">[原创]简易版Socket聊天室 附源码</title><summary type="text">这是继扫雷之后的另一个C#习作，实现了一个带表情的聊天室。个人认为主要的工作量分别在于：异步Socket、XML序列化、设计简单的通讯协议以及如何实现带表情的对话框这四部分。这里先介绍一个基本结构，希望能抛砖引玉。</summary><published>2009-05-24T16:16:00Z</published><updated>2009-05-24T16:16:00Z</updated><author><name>magicdlf</name><uri>http://www.cnblogs.com/magicdlf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/magicdlf/archive/2009/05/25/ChatRoom.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/magicdlf/archive/2009/05/25/ChatRoom.html"/><content type="text">这是继扫雷之后的另一个C#习作，实现了一个带表情的聊天室。个人认为主要的工作量分别在于：异步Socket、XML序列化、设计简单的通讯协议以及如何实现带表情的对话框这四部分。这里先介绍一个基本结构，希望能抛砖引玉。</content></entry><entry><id>http://www.cnblogs.com/magicdlf/archive/2009/04/29/1446526.html</id><title type="text">再谈C#扫雷</title><summary type="text">看来大家都很喜欢扫雷这个话题啊. 感谢大家指出了我代码里的问题,这里徐小侠写了一个很好的实现:http://www.cnblogs.com/Chinese-xu/archive/2009/04/29/1446415.html 同时他指出我并没有完全按照面向对象的方法来设计,其实这个起源于我设计时候的一个初衷,在这里澄清一下.我一开始实现只个MineControl的时候,并没有考虑要将所有的逻辑都放...</summary><published>2009-04-29T12:42:00Z</published><updated>2009-04-29T12:42:00Z</updated><author><name>magicdlf</name><uri>http://www.cnblogs.com/magicdlf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/magicdlf/archive/2009/04/29/1446526.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/magicdlf/archive/2009/04/29/1446526.html"/><content type="text">看来大家都很喜欢扫雷这个话题啊. 感谢大家指出了我代码里的问题,这里徐小侠写了一个很好的实现:http://www.cnblogs.com/Chinese-xu/archive/2009/04/29/1446415.html 同时他指出我并没有完全按照面向对象的方法来设计,其实这个起源于我设计时候的一个初衷,在这里澄清一下.我一开始实现只个MineControl的时候,并没有考虑要将所有的逻辑都放...</content></entry><entry><id>http://www.cnblogs.com/magicdlf/archive/2009/04/28/1444953.html</id><title type="text">C#实现扫雷出炉</title><summary type="text">C#扫雷,附源码</summary><published>2009-04-27T17:28:00Z</published><updated>2009-04-27T17:28:00Z</updated><author><name>magicdlf</name><uri>http://www.cnblogs.com/magicdlf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/magicdlf/archive/2009/04/28/1444953.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/magicdlf/archive/2009/04/28/1444953.html"/><content type="text">C#扫雷,附源码</content></entry><entry><id>http://www.cnblogs.com/magicdlf/archive/2009/03/03/PInvoke.html</id><title type="text">如何通过P/Invoke返回Struct和String Array</title><summary type="text"/><published>2009-03-03T09:55:00Z</published><updated>2009-03-03T09:55:00Z</updated><author><name>magicdlf</name><uri>http://www.cnblogs.com/magicdlf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/magicdlf/archive/2009/03/03/PInvoke.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/magicdlf/archive/2009/03/03/PInvoke.html"/><content type="text"/></entry><entry><id>http://www.cnblogs.com/magicdlf/archive/2008/02/29/1086682.html</id><title type="text">计算文件的散列值</title><summary type="text"/><published>2008-02-29T14:19:00Z</published><updated>2008-02-29T14:19:00Z</updated><author><name>magicdlf</name><uri>http://www.cnblogs.com/magicdlf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/magicdlf/archive/2008/02/29/1086682.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/magicdlf/archive/2008/02/29/1086682.html"/><content type="text"/></entry><entry><id>http://www.cnblogs.com/magicdlf/archive/2008/02/27/1083958.html</id><title type="text">zz .NET抽象工厂模式 from cnblogs</title><summary type="text"/><published>2008-02-27T09:19:00Z</published><updated>2008-02-27T09:19:00Z</updated><author><name>magicdlf</name><uri>http://www.cnblogs.com/magicdlf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/magicdlf/archive/2008/02/27/1083958.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/magicdlf/archive/2008/02/27/1083958.html"/><content type="text"/></entry><entry><id>http://www.cnblogs.com/magicdlf/archive/2008/02/25/1080972.html</id><title type="text">清空VSTFS cache</title><summary type="text"/><published>2008-02-25T08:42:00Z</published><updated>2008-02-25T08:42:00Z</updated><author><name>magicdlf</name><uri>http://www.cnblogs.com/magicdlf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/magicdlf/archive/2008/02/25/1080972.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/magicdlf/archive/2008/02/25/1080972.html"/><content type="text"/></entry></feed>
