﻿<?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>语源科技BlogJava-无界</title><link>http://www.blogjava.net/LittleDS/</link><description>If the only tool you have is a hammer, you tend to see every problem as a nail.</description><language>zh-cn</language><lastBuildDate>Tue, 05 May 2026 01:05:44 GMT</lastBuildDate><pubDate>Tue, 05 May 2026 01:05:44 GMT</pubDate><ttl>60</ttl><item><title>USACO 终于做完了</title><link>http://www.blogjava.net/LittleDS/archive/2009/05/11/269990.html</link><dc:creator>杨磊</dc:creator><author>杨磊</author><pubDate>Mon, 11 May 2009 01:27:00 GMT</pubDate><guid>http://www.blogjava.net/LittleDS/archive/2009/05/11/269990.html</guid><wfw:comment>http://www.blogjava.net/LittleDS/comments/269990.html</wfw:comment><comments>http://www.blogjava.net/LittleDS/archive/2009/05/11/269990.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/LittleDS/comments/commentRss/269990.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LittleDS/services/trackbacks/269990.html</trackback:ping><description><![CDATA[用了大概一个半月的时间吧，当然中间有大概一个礼拜空着来着<br />
<br />
这是第二次做USACO了，第一次是高中的时候，那个时候的题目跟现在的都不太一样，主要是顺序，而且那个时候是用PASCAL写的<br />
<br />
但是高中的时候没有做完，卡在了Section 5之前，其实是因为很多东西不会，数学其实也不够好，至于理解的能力，不知道现在是不是也有所提高了<br />
<br />
其实这次做的并不是非常顺利，我不是牛人，不可能一天扫10几道题目那种，然后每到题目半个小时就搞定<br />
<br />
前面3个Section的题目还都不算是很难，都是训练型的，都是教你算法怎么用，从Section 4开始就有比较难的题目了，尤其是DP<br />
<br />
DP从高中开始我就没有感觉，那时候就有人跟我说，只能多做题目，也许我现在做的还不够多吧，总感觉DP是很有用很有用的东西，所以一直想学好<br />
<br />
不管怎么样，USACO总算是磕磕碰碰的做完了，应该在NoCow和Google的帮助下终于做完了<br />
<br />
后面大部分题目我都看了解题报告，有些算法想得出，但是不知道该怎么应用到题目之上<br />
<br />
现在发现这点才是最重要的，算法模块谁不会写啊，都可以提前写好一个放在那里，但是问题是怎么把这个算法应用到题目上<br />
<br />
可能这就是所谓的建模吧，把题目变形一下，然后跟我们已知的算法联系起来<br />
<br />
还有另外一种情况，这个题目的算法不是已知的任何算法，要自己去想的，这才是真正考验一个人算法素养的时候<br />
<br />
就像TCO里面的题目，其实很多都是这样的，很少会给你一道题目让你直接去套一个算法的<br />
<br />
可能原来我在这方面的理解就有偏差，我总认为，你把所有的常见算法都练熟了，所有的题目都可以横扫<br />
<br />
但是问题就是，你能不能看得出来哪道题目用哪种算法<br />
<br />
而且，就像DP这种题目，就算你看出来了，状态转移方程你也未必写的出来<br />
<br />
总之还是学到了很多，虽然磕磕碰碰，但是做完了100道题还是会有收获的<br />
<br />
不知道下一个目标是什么SGU呢，还是TCO<br />
<br />
其实之所以喜欢USACO的一个原因就是他会告诉你测试数据，你可以很方便的Debug<br />
<br />
像OJ这种，不告诉你测试数据的，如果遇到了WA，你就要想破脑袋去想你的程序哪里错了<br />
<br />
而往往一个人自己看自己的程序的时候，是很难发现错误的，这就会让人很郁闷，真的是非常郁闷<br />
<br />
更何况，有些OJ真的是很贱的，用一些超级恶心的数据来钻你的空子。<br />
<br />
不知道这样对不对，也许是考验你的细心程度吧<br />
<br />
SGU or TCO 呢？<br />
<br />
<img src ="http://www.blogjava.net/LittleDS/aggbug/269990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LittleDS/" target="_blank">杨磊</a> 2009-05-11 09:27 <a href="http://www.blogjava.net/LittleDS/archive/2009/05/11/269990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>USACO Section 5回顾</title><link>http://www.blogjava.net/LittleDS/archive/2009/05/11/269988.html</link><dc:creator>杨磊</dc:creator><author>杨磊</author><pubDate>Mon, 11 May 2009 01:16:00 GMT</pubDate><guid>http://www.blogjava.net/LittleDS/archive/2009/05/11/269988.html</guid><wfw:comment>http://www.blogjava.net/LittleDS/comments/269988.html</wfw:comment><comments>http://www.blogjava.net/LittleDS/archive/2009/05/11/269988.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/LittleDS/comments/commentRss/269988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LittleDS/services/trackbacks/269988.html</trackback:ping><description><![CDATA[<table style="border-collapse: collapse;" width="1073" border="1" cellpadding="0" cellspacing="0" height="676">
    <col style="width: 257pt;" width="342">
    <col style="width: 503pt;" width="671">
    <tbody>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33"><span><a href="http://ace.delos.com/usacotext2?a=d20jq4n6JE1&amp;S=chtext">TEXT
            Convex Hulls</a></span></td>
            <td style="width: 503pt;" width="671">突包</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Fencing the Cows&nbsp;</td>
            <td>突包问题，直接忽略，差不多所有的计算几何我都跳过了</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Starry Night&nbsp;</td>
            <td>超级麻烦题，用Flood Fill把所有的pattern全认出来，然后判断重复，不重复就添加新的</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Musical Themes&nbsp;</td>
            <td>DP题，技巧在于如果两个序列是theme，那么相邻的两个number差相等</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Snail Trail&nbsp;</td>
            <td>DFS，没啥技巧</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Electric Fences&nbsp;</td>
            <td>刚开始以为是Divide&amp;Conquer，后来发现跟那道题不一样，直接搜索就可以</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Wisconsin Squares&nbsp;</td>
            <td>搜索题，Testcase只有sample那一组</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33"><span><a href="http://ace.delos.com/usacotext2?a=d20jq4n6JE1&amp;S=heur">TEXT
            Heuristics &amp; Approximate Searches</a></span></td>
            <td>启发式搜索，没看</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Milk Measuring&nbsp;</td>
            <td>一道我看Analysis看了两天的DP，其实还是没有深刻理解</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Window Area&nbsp;</td>
            <td>可以用矩形切割过</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Network of Schools&nbsp;</td>
            <td>强连通分量题</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Big Barn&nbsp;</td>
            <td>最大子正方形，简单的DP</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB All Latin Squares&nbsp;</td>
            <td>搜索+剪枝</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Canada Tour&nbsp;</td>
            <td>诡异的DP算法，Analysis的那个DP倒是还可以接受，不过Nocow上的似乎需要证明，但是又没有</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Character Recognition&nbsp;</td>
            <td>这道题目都能用DP，不得不感叹DP的伟大</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Betsy's Tour&nbsp;</td>
            <td>又是搜索+剪枝</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB TeleCowmunication&nbsp;</td>
            <td>先把点转化成边，然后求最小割</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Picture&nbsp;</td>
            <td>离散化</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Hidden Passwords&nbsp;</td>
            <td>搜索+KMP优化</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 257pt;" width="342" height="33">PROB Two Five&nbsp;</td>
            <td>算是道难题吧，Analysis都看了好久，DP真是无所不能</td>
        </tr>
    </tbody>
</table>
<br />
第六个Section的就不写了，两个DP+一个牛叉的位运算<br />
<br />
那个Cow XOR我估计我这辈子都不会忘记了。<br />
<br />
<img src ="http://www.blogjava.net/LittleDS/aggbug/269988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LittleDS/" target="_blank">杨磊</a> 2009-05-11 09:16 <a href="http://www.blogjava.net/LittleDS/archive/2009/05/11/269988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>USACO Section 4回顾</title><link>http://www.blogjava.net/LittleDS/archive/2009/05/11/269981.html</link><dc:creator>杨磊</dc:creator><author>杨磊</author><pubDate>Mon, 11 May 2009 00:52:00 GMT</pubDate><guid>http://www.blogjava.net/LittleDS/archive/2009/05/11/269981.html</guid><wfw:comment>http://www.blogjava.net/LittleDS/comments/269981.html</wfw:comment><comments>http://www.blogjava.net/LittleDS/archive/2009/05/11/269981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LittleDS/comments/commentRss/269981.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LittleDS/services/trackbacks/269981.html</trackback:ping><description><![CDATA[<table style="border-collapse: collapse;" width="993" border="1" cellpadding="0" cellspacing="0" height="648">
    <col style="width: 203pt;" width="271">
    <col style="width: 382pt;" width="509">
    <tbody>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33"><span><a href="http://ace.delos.com/usacotext2?a=d20jq4n6JE1&amp;S=opt">TEXT
            Optimization Techniques</a></span></td>
            <td style="width: 382pt;" width="509">讲怎么剪枝的</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Beef McNuggets&nbsp;</td>
            <td>初看上去像是一道背包问题，但是用背包肯定超时，后来看了解题报告，发现原来是数学题</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Fence Rails&nbsp;</td>
            <td>高维背包问题，只能搜索</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Fence Loops&nbsp;</td>
            <td>其实是很简单的一道最短路问题，恶心就恶心在图的转化</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Cryptcowgraphy&nbsp;</td>
            <td>非常恶心的搜索+剪枝</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33"><span><a href="http://ace.delos.com/usacotext2?a=d20jq4n6JE1&amp;S=flow">TEXT
            "Network Flow" Algorithms</a></span></td>
            <td>网络流，我第一次会写网络流就是看了这个算法</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Drainage Ditches&nbsp;</td>
            <td>网络流练习题</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB The Perfect Stall&nbsp;</td>
            <td>最大匹配，匈牙利算法</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Job Processing&nbsp;</td>
            <td>第一问是贪心，第二问应该也还是贪心，就是把第一问最快做完的给第二问最慢做完的</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Cowcycles&nbsp;</td>
            <td>直接枚举的好像</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33"><span><a href="http://ace.delos.com/usacotext2?a=d20jq4n6JE1&amp;S=bignum">TEXT Big
            Numbers</a></span></td>
            <td>高精度</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Buy Low, Buy Lower&nbsp;</td>
            <td>经典DP，最长下降序列，可是问题是要求出现了多少次，于是我看了解题报告</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB The Primes&nbsp;</td>
            <td>搜索+剪枝，要注意搜索的顺序，先是第五行第五列，然后对角线，然后其他</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Street Race&nbsp;</td>
            <td>关键路径，去掉每一个节点，然后看看起点与终点是否连通，不联通总说明是关键节点</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Letter Game&nbsp;</td>
            <td>枚举，分两块，先找完整的单词，然后找pair</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Shuttle Puzzle&nbsp;</td>
            <td>刚开始以为搜索，后来看了解题报告，发现原来有规律的，寒啊</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Pollutant Control&nbsp;</td>
            <td>最小割问题</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 203pt;" width="271" height="33">PROB Frame Up&nbsp;</td>
            <td>搜索题，用一张表来维护每个pattern的上下关系，可以大量剪枝</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/LittleDS/aggbug/269981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LittleDS/" target="_blank">杨磊</a> 2009-05-11 08:52 <a href="http://www.blogjava.net/LittleDS/archive/2009/05/11/269981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>USACO Section3回顾</title><link>http://www.blogjava.net/LittleDS/archive/2009/05/10/269942.html</link><dc:creator>杨磊</dc:creator><author>杨磊</author><pubDate>Sun, 10 May 2009 13:25:00 GMT</pubDate><guid>http://www.blogjava.net/LittleDS/archive/2009/05/10/269942.html</guid><wfw:comment>http://www.blogjava.net/LittleDS/comments/269942.html</wfw:comment><comments>http://www.blogjava.net/LittleDS/archive/2009/05/10/269942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LittleDS/comments/commentRss/269942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LittleDS/services/trackbacks/269942.html</trackback:ping><description><![CDATA[<table style="border-collapse: collapse; width: 810pt;" width="1080" border="1" cellpadding="0" cellspacing="0">
    <col style="width: 205pt;" width="273">
    <col style="width: 605pt;" width="807">
    <tbody>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33"><span><a href="http://ace.delos.com/usacotext2?a=EGhSHI3oley&amp;S=spantree">TEXT
            Minimal Spanning Trees</a></span></td>
            <td style="width: 605pt;" width="807">最小生成树，经典的算法</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Agri-Net&nbsp;</td>
            <td>最小生成树，USACO这点比较好，一般讲完了一个算法，都会出一道练习题</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Score Inflation&nbsp;</td>
            <td>背包问题</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Humble Numbers&nbsp;</td>
            <td>经典题目，算法是用已有的丑数乘上集合里面的素数去生成新的丑数</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Shaping Regions&nbsp;</td>
            <td>记得高中的时候做过这道题目，当初用的离散化的方法，不过现在USACO时限改成1秒了，那个方法可能不行了</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Contact&nbsp;</td>
            <td>枚举，输出有点烦</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Stamps&nbsp;</td>
            <td>一个背包问题的变形</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33"><span><a href="http://ace.delos.com/usacotext2?a=EGhSHI3oley&amp;S=knap">TEXT Knapsack
            Problems</a></span></td>
            <td>怎么到现在才介绍背包问题啊，前面都有好几道了</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Factorials&nbsp;</td>
            <td>高精度可以做，但是我是去接保留了最后的6位数，一直到最后。注意只保留一位数是不行的</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Stringsobits&nbsp;</td>
            <td>直接生成的</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Spinning Wheels&nbsp;</td>
            <td>又是一个我没看懂题的题目，然后看了标程，原来直接枚举就行了，如此简单</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Feed Ratios&nbsp;</td>
            <td>线性代数题目，直接把方程解出来就好了</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Magic Squares&nbsp;</td>
            <td>比较恶心的DFS，主要是转换那个状态起来比较麻烦</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Sweet Butter&nbsp;</td>
            <td>最短路的题目，枚举每一个点作为集合点，然后求最短路</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33"><span><a href="http://ace.delos.com/usacotext2?a=EGhSHI3oley&amp;S=euler">TEXT
            Eulerian Tours</a></span></td>
            <td>欧拉回路，又是一个经典的算法</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Riding The Fences&nbsp;</td>
            <td>欧拉回路的题目</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Shopping Offers&nbsp;</td>
            <td>DP问题，状态方程又不是我自己想的，555～</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Camelot&nbsp;</td>
            <td>著名的亚瑟王问题，我是看了解题报告才做出来的</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Home on the Range&nbsp;</td>
            <td>DP问题，找最大子正方形，后面还有一道是找最大子矩形的，难度大了很多</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB A Game&nbsp;</td>
            <td>动态规划，好不容易自己推出来的状态转移方程</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33"><span><a href="http://ace.delos.com/usacotext2?a=EGhSHI3oley&amp;S=geom">TEXT
            Computational Geometry</a></span></td>
            <td>计算几何，没看：（</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Closed Fences&nbsp;</td>
            <td>计算几何的题目，跳过了</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB American Heritage&nbsp;</td>
            <td>二叉树遍历顺序题目，已知前序中序求后序</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Electric Fence&nbsp;</td>
            <td>一个迭代求最优值的题目，其实就是不断缩小范围的枚举</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 205pt;" width="273" height="33">PROB Raucous Rockers&nbsp;</td>
            <td>DP，状态方程又是看来的，似乎这才是比较有难度的DP，不像前面有些题，状态方程简直显而易见</td>
        </tr>
    </tbody>
</table>

<img src ="http://www.blogjava.net/LittleDS/aggbug/269942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LittleDS/" target="_blank">杨磊</a> 2009-05-10 21:25 <a href="http://www.blogjava.net/LittleDS/archive/2009/05/10/269942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>USACO Section 2回顾</title><link>http://www.blogjava.net/LittleDS/archive/2009/05/10/269923.html</link><dc:creator>杨磊</dc:creator><author>杨磊</author><pubDate>Sun, 10 May 2009 09:43:00 GMT</pubDate><guid>http://www.blogjava.net/LittleDS/archive/2009/05/10/269923.html</guid><wfw:comment>http://www.blogjava.net/LittleDS/comments/269923.html</wfw:comment><comments>http://www.blogjava.net/LittleDS/archive/2009/05/10/269923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LittleDS/comments/commentRss/269923.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LittleDS/services/trackbacks/269923.html</trackback:ping><description><![CDATA[<table style="border-collapse: collapse; width: 933pt;" width="1244" border="1" cellpadding="0" cellspacing="0">
    <col style="width: 256pt;" width="341">
    <col style="width: 677pt;" width="903">
    <tbody>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33"><a href="http://ace.delos.com/usacotext2?a=jxdwg3tIwbR&amp;S=graph">TEXT
            Graph Theory</a></td>
            <td style="width: 677pt;" width="903">很有用的东西，建议仔细看看</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33"><a href="http://ace.delos.com/usacotext2?a=jxdwg3tIwbR&amp;S=flood">TEXT
            Flood Fill Algorithms</a></td>
            <td style="width: 677pt;" width="903">其实就是DFS</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB The Castle&nbsp;</td>
            <td style="width: 677pt;" width="903">Flood
            Fill，直接用上面那篇文章的算法就可以过</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Ordered Fractions&nbsp;</td>
            <td style="width: 677pt;" width="903">2次循环，求出所有的分数，约分，去掉重复的，排序</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Sorting A Three-Valued Sequence&nbsp;</td>
            <td style="width: 677pt;" width="903">这题我是看的结题报告，其实就是分块来交换
            ，首先把所有的能一次交换完成的处理掉，然后处理需要两次交换的</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Healthy Holsteins&nbsp;</td>
            <td style="width: 677pt;" width="903">忘记是贪心还是背包了&#8230;&#8230;-_-!</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Hamming Codes&nbsp;</td>
            <td style="width: 677pt;" width="903">直接枚举的</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33"><a href="http://ace.delos.com/usacotext2?a=jxdwg3tIwbR&amp;S=ds">TEXT
            Data Structures</a></td>
            <td style="width: 677pt;" width="903">跳过</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33"><a href="http://ace.delos.com/usacotext2?a=jxdwg3tIwbR&amp;S=dp">TEXT
            Dynamic Programming</a></td>
            <td style="width: 677pt;" width="903">动态规划啦，非常有必要好好看，不过这篇文章也只是对于初学者很有用</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Preface Numbering&nbsp;</td>
            <td style="width: 677pt;"  gt;罗马数字，首先把可能的组合数全部列出来放在一个数组里面，例如4，9这种，然后从最大的开始，做减法，减到不能减为止，再用下一个尝试="" width="903">罗马数字问题，把所有可能的组合先生成出来，4，9这种，然后就是求最小表示方法</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Subset Sums&nbsp;</td>
            <td style="width: 677pt;" width="903">背包问题，这题我最开始居然没看出来&#8230;&#8230;，以为是要深搜的，汗啊</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Runaround Numbers&nbsp;</td>
            <td style="width: 677pt;" width="903">直接模拟的，注意判断是否是round
            number的条件</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Party Lamps&nbsp;</td>
            <td style="width: 677pt;" width="903">我当初只注意到了每个操作做两次就跟没做一样，所以一共也就有8种操作，后来看了解题报告，发现其实只要处理前6个灯就可以了</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB The Longest Prefix&nbsp;</td>
            <td style="width: 677pt;" width="903">DP，我看得别人的解题报告，没办法DP是我的弱项</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Cow Pedigrees&nbsp;</td>
            <td style="width: 677pt;"  gt;dp，这题我虽然想出来是dp，但是我自己推倒的公式却不对，后来看了人家的状态公式，写了程序。现在再看，不知道这是不是就是传说中的树形="" dp="" width="903">DP，自己推了一个差不多的状态方程，可惜错了&#8230;&#8230;</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Zero Sum&nbsp;</td>
            <td style="width: 677pt;" width="903">直接模拟，把表达式生成出来，然后计算结果就行</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Money Systems&nbsp;</td>
            <td style="width: 677pt;" width="903">背包问题</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Controlling Companies&nbsp;</td>
            <td style="width: 677pt;" width="903">看了别人的解题报告，这道题目用了一个变形的Floyd算法，很巧妙</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33"><a href="http://ace.delos.com/usacotext2?a=jxdwg3tIwbR&amp;S=sp">TEXT
            Shortest Paths</a></td>
            <td style="width: 677pt;" width="903">经典算法啦</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB The Tamworth Two&nbsp;</td>
            <td style="width: 677pt;" width="903">模拟吧</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Overfencing&nbsp;</td>
            <td style="width: 677pt;" width="903">其实是比较恶心的一题，因为要转化那个图，剩下的就简单了，从两个exit开始BFS，然后找最大值</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Cow Tours&nbsp;</td>
            <td style="width: 677pt;"  gt;我最开始都没看懂题&#8230;&#8230;，因为那个半径的定义看错了，后来发现很简单，用floyd，然后找出来两个部分，每个部分里面的点配对一下，计算距离，找到最小的="" width="903">先Floyd，把图划分成两块，然后枚举</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Bessie Come Home&nbsp;</td>
            <td style="width: 677pt;" width="903">直接Floyd就行</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 256pt;" width="341" height="33">PROB Fractions to Decimals&nbsp;</td>
            <td style="width: 677pt;"  gt;很早之前我自己写过一个除法的程序，就是直接判断余数是不是出现过，提交了居然tle了，后来看了usaco的analysis，居然有那么巧妙的方法， ym="" width="903">判断时候循环的条件就是看余数是否重复出现，当然，在我看了Analysis之后，发现了更巧妙的办法</td>
        </tr>
    </tbody>
</table>

<img src ="http://www.blogjava.net/LittleDS/aggbug/269923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LittleDS/" target="_blank">杨磊</a> 2009-05-10 17:43 <a href="http://www.blogjava.net/LittleDS/archive/2009/05/10/269923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cow XOR (USACO)</title><link>http://www.blogjava.net/LittleDS/archive/2009/05/10/269919.html</link><dc:creator>杨磊</dc:creator><author>杨磊</author><pubDate>Sun, 10 May 2009 09:20:00 GMT</pubDate><guid>http://www.blogjava.net/LittleDS/archive/2009/05/10/269919.html</guid><wfw:comment>http://www.blogjava.net/LittleDS/comments/269919.html</wfw:comment><comments>http://www.blogjava.net/LittleDS/archive/2009/05/10/269919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LittleDS/comments/commentRss/269919.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LittleDS/services/trackbacks/269919.html</trackback:ping><description><![CDATA[这个题目是USACO最后的一道题目，我在网上找了N多的题解，不是完全一样的，就是说的不知道是什么东西的<br />
<br />
不知道为啥，是不是所有搞OI的人在写题解的时候都喜欢用&#8220;提示&#8221;的办法，不直接把问题说清楚，而是隐隐约约的公诉你该怎么做，然后你让你自己去想。<br />
<br />
于是导致我到现在都没有弄明白这道题目是怎么回事，尽管他们的做法有N多种，但是归根到底都是在搞一个叫做前缀的东西。<br />
<br />
下面这个是我在TopCoder上面找到的一个牛人的解释，算是英语写的比较好的，很通俗易懂的<br />
上面这篇文章我想我就不用再翻译了，说的比较清楚，但是他也没有给出具体的算法，不过思路已经很清楚了<br />
<br />
其实有了第一条性质之后，最朴素的办法就是枚举i和j，所以个2次循环，但是这样显然是要TLE的<br />
<br />
在没有更好的算法的前提下，这道题目的算法就是空间换时间，在我看来就是这样的。<br />
<br />
在看了N多代码之后，我觉得还是USACO的Analysis的代码看上去比较美，不知道为啥，那些用Hash和Trie的我都没看懂，可能是我比较菜吧<br />
<br />
下面我尝试着把USACO的代码解释一下，看看能不能说清楚，很遗憾，由于这道题目的巨型的输入数据，java肯定是没办法过的<br />
&nbsp;<br />
&nbsp;1 int main() {<br />
&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp; freopen("cowxor.in", "r", stdin);<br />
&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp; freopen("cowxor.out", "w", stdout);<br />
&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp; scanf("%i", &amp;n);<br />
&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp; xr[0] = 0;<br />
&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp; for (a = 0; a &lt; n; a++ ) {<br />
&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf("%d", &amp;x);<br />
&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xr[a+1] = xr[a] ^ x;<br />
&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp; }<br />
10&nbsp;&nbsp;&nbsp;&nbsp; for (a = 0; a &lt;= n; a++ ) {<br />
11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prev[a][0] = a-1;<br />
12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prev[a][1] = -1;<br />
13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; best[a] = a-1;<br />
14&nbsp;&nbsp;&nbsp;&nbsp; }<br />
15&nbsp;&nbsp;&nbsp;&nbsp; wyk = 22;<br />
16&nbsp;&nbsp;&nbsp;&nbsp; res = 0;<br />
17&nbsp;&nbsp;&nbsp;&nbsp; while (wyk--) {<br />
18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (a = 1; a &lt;= n; a++ )<br />
19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (prev[a][0] == -1)<br />
20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prev[a][1] = -1;<br />
21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br />
22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xr[a] &gt;&gt; wyk != xr[prev[a][0]] &gt;&gt; wyk) {<br />
23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp[0] = prev[prev[a][0]][1];<br />
24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp[1] = prev[a][0];<br />
25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp[0] = prev[a][0];<br />
27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp[1] = prev[prev[a][0]][1];<br />
28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prev[a][0] = tmp[0];<br />
30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prev[a][1] = tmp[1];<br />
31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fnd = false;<br />
33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (a = 1; a &lt;= n; a++ )<br />
34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (0 &lt;= best[a])<br />
35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((xr[a] &gt;&gt; wyk) % 2 != (xr[best[a]] &gt;&gt; wyk) % 2 ||<br />
36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 &lt;= prev[best[a]][1])<br />
37&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fnd = true;<br />
38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (fnd) {<br />
39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; res |= 1 &lt;&lt; wyk;<br />
40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (a = 1; a &lt;= n; a++ )<br />
41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (0 &lt;= best[a] &amp;&amp;<br />
42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (xr[a] &gt;&gt; wyk) % 2 == (xr[best[a]] &gt;&gt; wyk) % 2)<br />
43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; best[a] = prev[best[a]][1];<br />
44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
45&nbsp;&nbsp;&nbsp;&nbsp; }<br />
46&nbsp;&nbsp;&nbsp;&nbsp; for (a = 0; best[a] == -1; a++ );<br />
47&nbsp;&nbsp;&nbsp;&nbsp; printf("%d %d %d"n", res, best[a]+1, a);<br />
48&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br />
49 }<br />
<br />
首先，6～9行，程序把从1开始到i位结束的所有的xor都求出来保存在了数组xor里面，我想这个就是为了方便后面用到xor的那个性质。<br />
<br />
10～14行是一个 初始化的过程，这个prev的定义应该可以从USACO的Analysis上面看到：<br />
<br />
&nbsp; xr[pop[q][0]]'s and xr[q]'s binary representations are the same on
positions e, e+1, etc., and pop[q][0] is biggest possible with 0 &#8804;
pop[q][0] &lt; q. If there's no such pop[q][0] possible, then pop[q][0]
= -1.<br />
<br />
xr[pop[q][1]]'s and xr[q]'s binary representations are the same on
positions e+2, e+2, etc., different on position e, and pop[q][1] is
biggest possible with 0 &#8804; pop[q][1] &lt; q. If there's no such
pop[q][1] possible, then pop[q][1] = -1.<br />
<br />
<br />
我们要根据后面的循环来看这个prev数组的含义<br />
<br />
外侧的循环的作用是每次处理一位，由于题目中已经说明了，最多只有21位，所以循环21次就可以了。<br />
<br />
我们来看内侧的循环<br />
<br />
18～31行，对所有的奶牛编号循环一遍，得到的结果就是：<br />
对于当前的xor number，对于这个xor number的前21 - wyk位，与他相同的那个xor number的位置，并且，这个位置要尽量的靠后。<br />
<br />
如果没有相同的，那么这个位置就是-1<br />
<br />
这样，经过每次循环之后，prev里面就是与当前的xor number前k位相同的那个数的位置，一次一次循环，直到最后。<br />
<br />
prev[i][0]存的是当current bit也相同的时候的位置，prev[i][1]存的是currnet bit不相同时候的位置，为什么要这样呢？<br />
<br />
这可能就需要解释一下<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (xr[a] &gt;&gt; wyk != xr[prev[a][0]] &gt;&gt; wyk) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp[0] = prev[prev[a][0]][1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp[1] = prev[a][0];<br />
&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp[0] = prev[a][0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp[1] = prev[prev[a][0]][1];<br />
&nbsp;&nbsp;&nbsp; }<br />
如果当前比较的这一位相等，那么也就意味着prev[a][0]不用变，但是prev[i][1]却必须变化，因为当前的这一位，已经不是刚才比较的那一位了，prev[a][1]应该等于此时的prev[a][0]的prev[a][1]，我想这个应该不难理解。<br />
<br />
另一方面，如果当前比较的这一位不相等的时候，那么prev[a][1]就应该等于prev[a][0]了，因为之前的所有位都相等，之后当前这一位不相
等，这就是prev[a][1]的定义。那么prev[a][0]的值呢？我们需要注意的时候，当我们处理到a的时候，prev[a][0]位置的值肯定
是已经处理过的了。那么prev[a][prev[a][0]][1]里面存的就是与prev[a][0]在当前位不相等的那个xor
number的位置，注意，bit只有0和1，prev[a][0]与当前的不相等，而prev[a][prev[a][0]][1]又与prev[a]
[0]不相等，所以当前的prev[a][1]肯定与prev[a][prev[a][0]][1]是相等的。这就是 tmp[0] =
prev[prev[a][0]][1];的含义。<br />
<br />
我再来看32～37行，首先要知道best[q]的定义：<br />
<br />
if X would be equal biggest possible xor, then xr[best[q]] xor xr[q]'s
in equal X's binary representation on positions e, e+1, etc., and
best[q] is biggest possible with 0 &#8804; best[q] &lt; q. If there's no such
best[q] possible, then best[q] = -1.<br />
<br />
想要得到尽量大的xor，那么就要尽量让每一位都不相同 （xr[a] &gt;&gt; wyk) % 2就是取当前的二进制的最后一位<br />
<br />
这段代码的作用就是找，到当前位为止，是否有两个xor number，他们的每一位都不相同，这样就能保证异或结果是最大的。<br />
<br />
接下来看38～45的这段代码，因为我们是从高位到低位来处理的，这样的话，如果能保证高位是1，那么比你所有的低位都是1都管用：）<br />
<br />
于是，既然我们找到了高位是1的情况，那么我们就要记录下结果 res<br />
<br />
然后，剩下的那个循环就是更新best[a]<br />
<br />
在所有的xor
number中，如果当前位跟best[a]的当前位是相等的，那么就更新best[a]，将其更新为prev[best[a]][1]，就是除了当前位
不相等，其余位不变的那个xor number，这样就保证了从高位开始，每一位都能够尽量取到1，因为只要高位尽量是1，我们的结果就能尽量的大。<br />
<br />
其实prev这个数组里面真正有用的是prev[q][1]<br />
<br />
不知道我解释清楚了没，其实解释了一遍，自己也清楚了很多。
<img src ="http://www.blogjava.net/LittleDS/aggbug/269919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LittleDS/" target="_blank">杨磊</a> 2009-05-10 17:20 <a href="http://www.blogjava.net/LittleDS/archive/2009/05/10/269919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>USACO Section 1回顾</title><link>http://www.blogjava.net/LittleDS/archive/2009/05/09/269757.html</link><dc:creator>杨磊</dc:creator><author>杨磊</author><pubDate>Sat, 09 May 2009 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/LittleDS/archive/2009/05/09/269757.html</guid><wfw:comment>http://www.blogjava.net/LittleDS/comments/269757.html</wfw:comment><comments>http://www.blogjava.net/LittleDS/archive/2009/05/09/269757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LittleDS/comments/commentRss/269757.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LittleDS/services/trackbacks/269757.html</trackback:ping><description><![CDATA[<table style="border-collapse: collapse; width: 925pt;" width="1233" border="1" cellpadding="0" cellspacing="0">
    <col style="width: 85pt;" width="85">
    <col style="width: 250pt;" width="300">
    <col style="width: 575pt;" width="766">
    <tbody>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 54pt;" width="72" height="33">Section 1.0</td>
            <td style="width: 296pt;" width="395"><span><a href="http://ace.delos.com/usacotext2?a=OzTbBqNMY5F&amp;S=intro">TEXT
            Introduction</a></span></td>
            <td style="width: 575pt;" width="766">介绍啦，我是没看</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td rowspan="7" class="xl67" style="height: 199.6pt; width: 54pt;" width="72" height="264">Section 1.1</td>
            <td style="width: 296pt;" width="395"><span><a href="http://ace.delos.com/usacotext2?a=OzTbBqNMY5F&amp;S=grade">TEXT
            Submitting Solutions</a></span></td>
            <td style="width: 575pt;" width="766">交你怎么提交程序的，可以看看</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td rowspan="1" class="xl69" style="height: 24.95pt; width: 296pt;" width="395" height="66"><span>PROB Your Ride Is
            Here&nbsp;</span></td>
            <td style="width: 575pt;" width="766">最直接的方法是直接乘，然后mod 47,不过可以利用余数定理，边乘边mod</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33"><span><a href="http://ace.delos.com/usacotext2?a=OzTbBqNMY5F&amp;S=probs">TEXT Contest
            Problem Types</a></span></td>
            <td style="width: 575pt;" width="766">跳过</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33"><span><a href="http://ace.delos.com/usacotext2?a=OzTbBqNMY5F&amp;S=adhoc">TEXT Ad Hoc
            Problems</a></span></td>
            <td style="width: 575pt;" width="766">跳过</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Greedy Gift Givers&nbsp;</td>
            <td style="width: 575pt;" width="766">简单的模拟题，就是处理名字的时候有点烦</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Friday the Thirteenth&nbsp;</td>
            <td style="width: 575pt;" width="766">数日期的题，我不知道一天天的模拟能不能过，我是只算了周五这一天的。</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Broken Necklace&nbsp;</td>
            <td style="width: 575pt;" width="766">也是模拟题，不过很要细心，有很多特殊情况，比如全是w。</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td rowspan="6" class="xl67" style="height: 149.7pt; width: 54pt;" width="72" height="198">Section 1.2</td>
            <td style="width: 296pt;" width="395"><span><a href="http://ace.delos.com/usacotext2?a=OzTbBqNMY5F&amp;S=comp">TEXT
            Complete Search</a></span></td>
            <td style="width: 575pt;" width="766">跳过</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Milking Cows&nbsp;</td>
            <td style="width: 575pt;" width="766">直接模拟应该是过不了的，</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Transformations&nbsp;</td>
            <td style="width: 575pt;" width="766">模拟题，直接把所有可能的pattern生成出来，然后比较就行</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Name That Number&nbsp;</td>
            <td style="width: 575pt;" width="766">正确方法是把字典里面的所有word转化成数字，然后比较就行。</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Palindromic Squares&nbsp;</td>
            <td style="width: 575pt;" width="766">直接枚举</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Dual Palindromes&nbsp;</td>
            <td style="width: 575pt;" width="766">DFS，注意搜索的时候，只要搜索回文数前一半就行，后面的直接反向复制一下就好</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td rowspan="6" class="xl67" style="height: 149.7pt; width: 54pt;" width="72" height="198">Section 1.3</td>
            <td style="width: 296pt;" width="395"><span><a href="http://ace.delos.com/usacotext2?a=OzTbBqNMY5F&amp;S=greedy">TEXT
            Greedy Algorithm</a></span></td>
            <td style="width: 575pt;" width="766">跳过</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Mixing Milk&nbsp;</td>
            <td style="width: 575pt;" width="766">简单的贪心</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Barn Repair&nbsp;</td>
            <td style="width: 575pt;" width="766">也是贪心法，把最大的缝隙就出来，然后去覆盖</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33"><span><a href="http://ace.delos.com/usacotext2?a=OzTbBqNMY5F&amp;S=craft">TEXT Winning
            Solutions</a></span></td>
            <td style="width: 575pt;" width="766">跳过</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Calf Flac&nbsp;</td>
            <td style="width: 575pt;" width="766">枚举，从没一点向两边枚举</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Prime Cryptarithm&nbsp;</td>
            <td style="width: 575pt;" width="766">直接枚举，反正只有5个数</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td rowspan="5" class="xl67" style="height: 124.75pt; width: 54pt;" width="72" height="165">Section 1.4</td>
            <td style="width: 296pt;" width="395"><span><a href="http://ace.delos.com/usacotext2?a=OzTbBqNMY5F&amp;S=rec">TEXT
            More Search Techniques</a></span></td>
            <td style="width: 575pt;" width="766">跳过</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Packing Rectangles&nbsp;</td>
            <td style="width: 575pt;" width="766">恶心题，我没做：P</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB The Clocks&nbsp;</td>
            <td style="width: 575pt;" width="766">看了一个牛人的结题报告后过的，那位牛人总结了一个数组，就是如何让表针转一圈回到原来位置的操作组合</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Arithmetic Progressions&nbsp;</td>
            <td style="width: 575pt;" width="766">搜索，硬搜的</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Mother's Milk&nbsp;</td>
            <td style="width: 575pt;" width="766">BFS，把所有的情况都弄出来</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td rowspan="5" class="xl67" style="height: 124.75pt; width: 54pt;" width="72" height="165">Section 1.5</td>
            <td style="width: 296pt;" width="395"><span><a href="http://ace.delos.com/usacotext2?a=OzTbBqNMY5F&amp;S=binary">TEXT
            Introduction to Binary Numbers</a></span></td>
            <td style="width: 575pt;" width="766">跳过</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Number Triangles&nbsp;</td>
            <td style="width: 575pt;" width="766">经典DP</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Prime Palindromes&nbsp;</td>
            <td style="width: 575pt;" width="766">搜索，生成回文数，检查是否是素数。需要一点点剪枝（长度是偶数的回文数，除了11之外必然是合数，因它肯定是11的倍数）</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB SuperPrime Rib&nbsp;</td>
            <td style="width: 575pt;" width="766">直接枚举</td>
        </tr>
        <tr style="height: 24.95pt;" height="33">
            <td style="height: 24.95pt; width: 296pt;" width="395" height="33">PROB Checker Challenge&nbsp;</td>
            <td style="width: 575pt;" width="766">八皇后啊，用最经典的算法就能过，不过如果想优化的非常快，可能需要其他的办法，也有很复杂的。</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/LittleDS/aggbug/269757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LittleDS/" target="_blank">杨磊</a> 2009-05-09 15:05 <a href="http://www.blogjava.net/LittleDS/archive/2009/05/09/269757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>终于把USACO做完了</title><link>http://www.blogjava.net/LittleDS/archive/2009/05/09/269749.html</link><dc:creator>杨磊</dc:creator><author>杨磊</author><pubDate>Sat, 09 May 2009 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/LittleDS/archive/2009/05/09/269749.html</guid><wfw:comment>http://www.blogjava.net/LittleDS/comments/269749.html</wfw:comment><comments>http://www.blogjava.net/LittleDS/archive/2009/05/09/269749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LittleDS/comments/commentRss/269749.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LittleDS/services/trackbacks/269749.html</trackback:ping><description><![CDATA[<img alt="" src="http://www.blogjava.net/images/blogjava_net/littleds/USACO.jpg" width="567" height="173" /><br />
<br />
感想及题解待会儿再发：）<br />
<br />
<img src ="http://www.blogjava.net/LittleDS/aggbug/269749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LittleDS/" target="_blank">杨磊</a> 2009-05-09 13:50 <a href="http://www.blogjava.net/LittleDS/archive/2009/05/09/269749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Picture （USACO）</title><link>http://www.blogjava.net/LittleDS/archive/2009/05/07/269352.html</link><dc:creator>杨磊</dc:creator><author>杨磊</author><pubDate>Thu, 07 May 2009 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/LittleDS/archive/2009/05/07/269352.html</guid><wfw:comment>http://www.blogjava.net/LittleDS/comments/269352.html</wfw:comment><comments>http://www.blogjava.net/LittleDS/archive/2009/05/07/269352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LittleDS/comments/commentRss/269352.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LittleDS/services/trackbacks/269352.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.</span><span style="color: #000000;">*</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.</span><span style="color: #000000;">*</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #008000;">/*</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #008000;">ID:&nbsp;yanglei4<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #008000;">LANG:&nbsp;JAVA<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #008000;">TASK:picture<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;picture&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">[]&nbsp;level;<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;N;<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;ans&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Line&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;Comparable</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Line</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;s,t,p;<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;start;<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Line(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;c,&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;d)&nbsp;{<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;a;<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;b;<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;c;<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;d;<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;compareTo(Line&nbsp;o)&nbsp;{<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.p&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;o.p)&nbsp;{<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.start)<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.p&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;o.p&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;:&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Scan(Line[]&nbsp;L)&nbsp;{<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">20000</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;level[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;N;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(L[i].start)&nbsp;{<br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;L[i].s;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;L[i].t;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;level[j]</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(level[j]</span><span style="color: #000000;">==</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;L[i].s;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;L[i].t;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;level[j]</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(level[j]</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;done()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException&nbsp;{<br />
</span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;f&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedReader(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileReader(</span><span style="color: #000000;">"</span><span style="color: #000000;">picture.in</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
</span><span style="color: #008080;">54</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter&nbsp;out&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;PrintWriter(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedWriter(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileWriter(</span><span style="color: #000000;">"</span><span style="color: #000000;">picture.out</span><span style="color: #000000;">"</span><span style="color: #000000;">)));<br />
</span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Integer.parseInt(f.readLine());<br />
</span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Line[]&nbsp;Lx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Line[</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;N];<br />
</span><span style="color: #008080;">57</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Line[]&nbsp;Ly&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Line[</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;N];<br />
</span><span style="color: #008080;">58</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">59</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;N;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">60</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringTokenizer&nbsp;st&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;StringTokenizer(f.readLine());<br />
</span><span style="color: #008080;">61</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Integer.parseInt(st.nextToken());</span><span style="color: #008000;">//</span><span style="color: #008000;">left&nbsp;x</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">62</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;y1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Integer.parseInt(st.nextToken());</span><span style="color: #008000;">//</span><span style="color: #008000;">left&nbsp;y</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">63</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Integer.parseInt(st.nextToken());</span><span style="color: #008000;">//</span><span style="color: #008000;">right&nbsp;x</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">64</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;y2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Integer.parseInt(st.nextToken());</span><span style="color: #008000;">//</span><span style="color: #008000;">right&nbsp;y</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">65</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10000</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">66</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y1&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10000</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">67</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x2&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10000</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">68</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y2&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10000</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">69</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lx[</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Line(x1,x2,y1,</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">70</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lx[</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Line(x1,x2,y2,</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">71</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ly[</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Line(y1,y2,x1,</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">72</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ly[</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Line(y1,y2,x2,</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">73</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">74</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arrays.sort(Lx);<br />
</span><span style="color: #008080;">75</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arrays.sort(Ly);<br />
</span><span style="color: #008080;">76</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;level&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">[</span><span style="color: #000000;">20001</span><span style="color: #000000;">];<br />
</span><span style="color: #008080;">77</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scan(Lx);<br />
</span><span style="color: #008080;">78</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scan(Ly);<br />
</span><span style="color: #008080;">79</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(ans);<br />
</span><span style="color: #008080;">80</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">81</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">82</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">83</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException&nbsp;{<br />
</span><span style="color: #008080;">84</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;picture&nbsp;t&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;picture();<br />
</span><span style="color: #008080;">85</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.done();<br />
</span><span style="color: #008080;">86</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">87</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">88</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">89</span>&nbsp;</div>
<br />
这道题用了离散化的方法<br />
<br />
其实最朴素的方法就是在一个20000*20000的矩阵上面把所有的点描出来，然后把这些点的周长算出来，不过算周长这一步也是很麻烦的。<br />
<br />
因为毕竟还有可能出现&#8220;空心&#8221;的情况<br />
<br />
用离散化的方法就是想办法只数每条线段，而不去管其他空白的地方是怎么样的。<br />
<br />
由于我们是需要算周长的，所以只需要看矩形的四条边就可以了。<br />
<br />
然后，我们就是先看所有的横边，再看竖边。<br />
<br />
先把横边全部选出来，放在一个数组里面，然后排序，从下到上。<br />
<br />
一个矩形的两条边要分成始边和终边，排序的时候，如果纵坐标相同，那么应该把始边放在终边。<br />
<br />
如果遇到始边，那么就把这条边上面的所有点level[j]加一。<br />
<br />
如果遇到终边，就把那条边上所有的点的level[j]减一<br />
<br />
于是，当一条边上的点的leve是1的时候，那么就说明这条边肯定是始边边缘，所以要ans++<br />
<br />
另一种情况，当一条边上的点的level是0的时候，那么说明这个点是终边边缘，所以ans++<br />
<br />
这样扫完横边再扫竖边。<br />
<br />
最后的ans就是周长了。<br />
<br />
不过这个算法的时间效率并不是非常的好，因为数据比较弱（可能是这样）<br />
<br />
如果真的是有5000个矩形，没个矩形都是20000&#215;20000的，那么可能会超时<br />
<br />
<img src ="http://www.blogjava.net/LittleDS/aggbug/269352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LittleDS/" target="_blank">杨磊</a> 2009-05-07 10:33 <a href="http://www.blogjava.net/LittleDS/archive/2009/05/07/269352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>USACO终于到5.5了</title><link>http://www.blogjava.net/LittleDS/archive/2009/05/06/269313.html</link><dc:creator>杨磊</dc:creator><author>杨磊</author><pubDate>Wed, 06 May 2009 15:57:00 GMT</pubDate><guid>http://www.blogjava.net/LittleDS/archive/2009/05/06/269313.html</guid><wfw:comment>http://www.blogjava.net/LittleDS/comments/269313.html</wfw:comment><comments>http://www.blogjava.net/LittleDS/archive/2009/05/06/269313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LittleDS/comments/commentRss/269313.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LittleDS/services/trackbacks/269313.html</trackback:ping><description><![CDATA[虽然从5.1开始，大部分题目都要借助于NoCow和网上的解题报告，但是还是学到了不少的东西。<br />
<br />
原来认为只要熟练的掌握各种算法，那就可以随便去切题，现在发现其实不是这样。<br />
<br />
有很多题目，都需要进行一些转化，也可以说是建模，才能套用现成的算法<br />
<br />
而有一些题目，根本就没有现成的算法，只能你自己去想<br />
<br />
这种算法基本上是不属于任何一类的<br />
<br />
还有一些比如说剪枝，虽然搜索谁都会，Brute Force谁都会写，但是剪枝却不是谁都能写的出来的<br />
<br />
这就需要一些数学功底<br />
<br />
现在发现这个东西必须要长年累月的积累才能够达到驾轻就熟的境界。<br />
<br />
但是就算那样，也不能保证所有的题目都会做。<br />
<br />
<img src ="http://www.blogjava.net/LittleDS/aggbug/269313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LittleDS/" target="_blank">杨磊</a> 2009-05-06 23:57 <a href="http://www.blogjava.net/LittleDS/archive/2009/05/06/269313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>