??xml version="1.0" encoding="utf-8" standalone="yes"?>热久久这里只有精品,国产亚洲欧美成人久久片,久久久久久综合一区中文字幕http://m.shnenglu.com/sdfond/category/12472.html世事z明皆学问,人情l达x?/description>zh-cnWed, 21 Apr 2010 10:56:52 GMTWed, 21 Apr 2010 10:56:52 GMT60环上的高斯消元问?http://m.shnenglu.com/sdfond/archive/2010/02/06/107393.htmlsdfondsdfondSat, 06 Feb 2010 10:07:00 GMThttp://m.shnenglu.com/sdfond/archive/2010/02/06/107393.htmlhttp://m.shnenglu.com/sdfond/comments/107393.htmlhttp://m.shnenglu.com/sdfond/archive/2010/02/06/107393.html#Feedback1http://m.shnenglu.com/sdfond/comments/commentRss/107393.htmlhttp://m.shnenglu.com/sdfond/services/trackbacks/107393.html  高斯消元法适用的两U情况ؓ域上的问题和环上的问题。域上的问题是可以通过加减乘除把系数阵化简成ؓ对角U全1的Ş式,是允许有除法的,一般用于QҎ的高斯消元。而环上的问题一般涉及整C及取模,除法是不允许的,此外环上的问题一般都要涉及高斯消元的一个比较难处理的问题:无穷解问题?br>
【问题分析?br>  首先考虑比较单的环上的问题:?问题Q这c问题的l典代表是开关灯问题。其实这c问题可以允讔R法(用异或代替)Q每ơ消元的时候如果出C定的变量,那么跌当前列,保持行不变,l箋消元。当消元q后会出现的问题是,如果pL늚U小于增光矩늚U,那么无解Q或者不是所有的变量都已l取|Dq个的原因一个是消元时出现全0列,一个是pL늚U等于增光矩늚U且于未知数的个数Q也是出现无穷解。在?域上出现无穷解的时候只需枚D每个不确定变元的|0?Q,一般是用来扑ֈ一个最优解。这里一个比较y妙的Ҏ是保留消元过E的对角矩阵Q这样一旦确定了未知敎ͼ直接回带找解Q无需重新建立方程?br>  模n域上的无I问题更ؓ复杂一些。一个是变元的取D围变大了Q?到n-1Q某些问题取D会是负的Q,另一个问题是׃模n未必是素敎ͼ如果是素数存在解׃定唯一Q不是素数的话会出现多组解,q得l箋枚D才行。以几个题目ZQ?br>  POJ 2947 Widget FactoryQ这是环上问题的基础版,考察了对于变元数和方E数不确定的时候对方程解数的判断方法。消元的q程q是很简单的Q细节考虑清楚可以了?br>  POJ 1395 Cog-WheelsQ方E的建立很y妙,׃数的范围很小Q?00以内Q,因此可以Ҏ每个质因数的q次建立方程Q对每个轮子除以最的那个数后可以进行质因数分解Q方E数很少Q最后徏立的是一个整pL方程。不q这里的问题是由于存在无I的情况,要搜索;而且变量的取D围不太好把握Q我是取增广늚所有系数的最大值maxQ把枚D的界定在了|max|以内Q有点像扩展Ƨ几里d的思想Q如果有x、y满ax + by = dQ那么x上下动b个,y上下动a个依然方E成立。另外注意的是徏立方E的时候会产生齐次方程Q要特别判断一下。总而言之这个题目写h很恶心,复杂度感觉巨高,但是实际q行速度很快?br>  POJ 2055 Kid's ProblemQ这个题目BTE度又进了一步,是个模线性方E组Q不仅可能存在无IQ而且模不一定是素数Q对于确定的变元取g会很多,M是各种搜烦。不q这个题目很无聊的一Ҏ在消元过E中Q之前我一直是取要消元的两个系数的最公倍数Q分别放大然后再减去Q就像分数通分的做法,做其他的题目都没有问题(因ؓ没有影响解的情况Q;但是q个题目q样居然会超Ӟ当然不是时在高斯消元的q程Q而是之后枚D的过E。这个题目必d用那U类似求gcd的方法,两个方程互相减来减去Q因个题目数据取D围太了Q?0以内Q,因此q样做的复杂度也不高。这两种做法的唯一区别是后者消元后的对角阵中,d角线的系数很(减来减去减得很小Q,而用“通分”的方法系C保留为原pLQ可能很大)Q虽然最后计的l果完全相同Q但是可能后者能够快速得C个好的可行解Q利用这个剪掉了不少冗余情况Q而前者也许差了一些,p时了?br>  Ural 1561 Winnie the PoohQ应该是高斯消元问题的终极版本了Q考察的是寚w斯消元的理解Q不q没有在方程的徏立上讄太多的坎Q。这个题目可以归lؓ包含若干操作的动态高斯消元问题:d一个变元,d一个方E,询问l定方程解的情况。因Z是询问方E组的解Q而是询问方程的解Q这L话有可能虽然有多l解但是最后对应方E的值是相同的。我一开始采用枚举方E的取值判断有解的ҎQ超时了Q后来改成出C定解的时候搜索判断解的情况,依然时。这两种Ҏ的复杂度都达到O(n ^ 3)以上Q所以需要好的办法。仔l思考之后发玎ͼ如果方程有解且唯一Q那么它一定和已经存在的方E组Q看成是向量Q是U性相关的Q这L话可以每ơ添加方E都l护对角阵,对于一ơ询问,利用已有的方E组依次对给定的方程消元Q到最后判断这个方E的pL是否?Q如果是的话解个模方E就行了Q如果不是的话说明这个方E的取g有很多种情况。每ơ添加方E都判断是否产生矛盾Q无解)Q如果无解以后不再判断,一直输出无解。利用这U方式可以很快的处理查询Q每ơ复杂度才O(n ^ 2)?br>
【问题ȝ?br>  环上的高斯消元问题应用比较广泛,但是~码的复杂度也比较高。此外,不同的题目往往要求各异Q因此也没有l一的模板,需要根据题目的要求来编写程序。通过以上几个题目的练习,对于高斯消元的求解已l没有太大的问题了。但是题目中方程的徏立以及优化求解依然是隄Q需要不断地U篏和ȝ?

注:本文作于2009q???0Ҏ


sdfond 2010-02-06 18:07 发表评论
]]>
SPOJ 2154 Kruskalhttp://m.shnenglu.com/sdfond/archive/2010/02/06/107365.htmlsdfondsdfondSat, 06 Feb 2010 01:04:00 GMThttp://m.shnenglu.com/sdfond/archive/2010/02/06/107365.htmlhttp://m.shnenglu.com/sdfond/comments/107365.htmlhttp://m.shnenglu.com/sdfond/archive/2010/02/06/107365.html#Feedback0http://m.shnenglu.com/sdfond/comments/commentRss/107365.htmlhttp://m.shnenglu.com/sdfond/services/trackbacks/107365.html  猴子和Kruskal玩一个取矛_游戏Q给定n堆石子,n不大?00Q每堆石子的个数大于2于2 ^ 32Q双方轮取子,每次可以从一堆中取最多k个,当一方取完石子后某堆矛_的个数是素数的话那么当前玩家莯。问猴子是否有必胜策略?br>
【题目分析?br>  q是一道BT题,中间讄了许多trick。开始对题意没有完全理解Q错了很多次Q后来找来了数据Q才发现了问题?br>  题目中描q的莯{略是:"A player wins if after his move the size of some heap is a prime number."q句话乍一看以为是取完矛_后剩下的矛_个数是素数的时候就莯Q其实还隐藏着另一U可能:如果多堆矛_个数是素敎ͼ当前玩家无论怎样取都能获胜,因ؓ在他取完之后Q其他堆的石子个数是素数Q也满莯条g?br>  接下来考虑一般情c这个题目是限制中间状态的Nim游戏Q也是_对于一堆个Cؓn的石子而言Q它的SG值取决于于n的最大素数。注意这里题讑֏有了一个小trickQ题目说明了需要取1到k个,如果当前矛_个数本n是素敎ͼ当然是没用的Q因此是于n的最大素数。设于n的最大素数是p(题目中说明了矛_个数大于2Q因此p一定存?Q那么可以在k步以内到达p的一定是必胜态,而且是直接获胜,需要在输入的时候特?q一炚w要注意,在解决限制中间状态的Nim游戏时一般都需要特?。然后就是p + k + 1q个状态,因ؓ它可辄状态全是必胜态,因此它是必|态,SGgؓ0。现在考虑大于p + k + 1的状态,问题出来了。以p + k + 2q个状态ؓ例,因ؓ它可以到达p + 2 ... p + k + 1q些状态,因ؓp + 2 ... p + k都是直接莯状态,如何判定他们的SG值呢Q如果假讑֮们的SG值是1Q那么p + k + 2q个状态的SG值应该是2。但是思考一下SG值的定义Q它是定义在一个DAG上的Q所有的状态最后都是可以在有限步内转移到终止?必|?。但是p + 1 ... p + kq些状态都转移Cpq个状态上Q我们肯定不能认定p状态是l止态,因此仅仅凭借p + 1 ... p + kq些状态是必胜态就单的把它们的SGD?是不恰当的;q些限制状态和以前的题目还不同Q这些限制状态都不能转移到终止态上Q但是由于题目的要求Q它们又都是必胜态,因此把它们的SGD为无I大更合适些?br>  仔细思考一下带限制状态的SG游戏Q可以发玎ͼ它们和一般的SG游戏的区别在于,在分析一般的SG游戏的时候,对于一个状态图而言Q{Udl止态的时候ƈ不意味着游戏l束Q因为玩家可以通过走其他的状态图来保证是否达到必胜态;但是带限制状态的SG游戏Q限制的状态双斚w是不敢走的,因ؓ一旦一方走入限制状态,另一方立刻获胜,游戏q止了。可以认为,只要走入限制态就相当于认输,对于双方玩家而言肯定都不会这样做Q因此这些限制状态就成了“ȝ?#8221;Q完全可以忽视这些状态(也就是说不存在到q些状态的转移Q。通过上述分析Q我们可以认定p + k + 2q个状态的SG值应该是1而不??br>  现在q个问题的做法就比较明朗了,对于每堆矛_Q去掉限制态的讨论后,变成了在集合{1...k}中选择元素的一个Subtraction GameQ它的SG值是?k + 1)循环的?br>  然后是求最q素数的问题了,q个没有好办法,只能暴力枚D。对于一个数nQ在sqrt(n)到n之间存在素数Q感觉应该是Q但是不会证Q,因此最多枚举sqrt(n)ơ就能找到解。但是每ơ枚丑ֈ素的复杂度还是sqrt(n)Qd杂度q是比较高,我在本地跑数据跑?U,交上去超时了QSPOJ的时?0U,q居然也时Q数据够变态)。想了很久也没有什么新的算法,无奈只能在判素上下点功夫Q直接把Miller-Rabin搞出来了Q速度提高C2U,仍然时。后来又加了一些常C的优化,l于q了?br>
【ȝ?br>  q个题目做了很长旉Q一斚w是审题不清,错了几次Q另一斚w是对于SG的理论理解的不够透彻Q想了很久终于想明白了;再有是优化法也花了很长时间。不q通过q个题目对于SG理论的理解又q了一步,感觉不错Q呵c?

注:本文作于2009q???9?7?br>


sdfond 2010-02-06 09:04 发表评论
]]>
l合游戏ȝ——基本博弈问?/title><link>http://m.shnenglu.com/sdfond/archive/2010/02/06/107364.html</link><dc:creator>sdfond</dc:creator><author>sdfond</author><pubDate>Sat, 06 Feb 2010 00:55:00 GMT</pubDate><guid>http://m.shnenglu.com/sdfond/archive/2010/02/06/107364.html</guid><wfw:comment>http://m.shnenglu.com/sdfond/comments/107364.html</wfw:comment><comments>http://m.shnenglu.com/sdfond/archive/2010/02/06/107364.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/sdfond/comments/commentRss/107364.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/sdfond/services/trackbacks/107364.html</trackback:ping><description><![CDATA[<p>【概q?br>  最q的几次比赛Q博弈的题目一直不,而且博弈问题是一块比较复杂、庞大的内容Q因此在q里结一下,希望能够帮自q清一些思\Q争取也多来几个pdQ呵c?/p> 竞赛中出现的l合游戏问题一般都满以下特征Q?br>    1. 二h博弈游戏Q每个h都采用对自己最有利的策略,q且是两个h轮流做出决策<br>    2. 在游戏中的Q意时刻,每个玩家可选择的状态是固定的,没有随机成分<br>    3. 游戏在有限步数内l束Q没有^局出现<br>  大部分的题目都满上q条Ӟ因此q里只讨论在上述条g范畴内的博弈问题。这cd弈问题,通常q有若干分类。一U是规定Ud最后一步的游戏者获胜,q种规则叫做<span style="color: red;">Normal Play Rule</span>Q另一U是规定Ud最后一步的游戏者输Q这U规则叫?span style="color: red;">Misere Play Rule</span>Q也UCؓAnti-SG游戏。此外,对于游戏的双方,如果二者博弈的规则相同Q那么称cL戏是<span style="color: red;">对等</span>(impartial games)的;否则UCؓ<span style="color: red;">不^{游?/span>(partizan games )。当初WHU的那场比赛就是由于对于这个概念不是很清晰Q导致看完题目之后就用SG定理来做Q浪费了很多机时。实际上Q解决不q等博弈问题的方法和普通的博弈问题QSG游戏Q是有区别的Q一般会采用动态规划或者surreal number?br><br>【博弈基知识?br>  在SG游戏中,最Zh熟知的是必胜必|态,也叫NP态理论。注意的是,P态对应的是先手必败态,N态对应的是先手必胜态。必胜必败态理论是Q?br>  1. All terminal positions are P-positions<br>  2. From every N-position, there is at least one move to a P-position<br>  3. From every P-position, every move is to an N-position<br>  英文的表q非常简z清晎ͼ而且q个理论也很好理解,如果在当前状态的下一步可以走到必败态,那么当前玩家可以走到那个状态,把必败态推l另一方;如果所有可辄态都是必胜态,那么当前玩家无论如何赎ͼ都会把必胜态让l对斏V根据必胜必败态理论,我们可以递归的求出每个状态是N态还是P态。必胜必败态理论其实已l把博弈问题转化成了一个有向图Q借助图这个模型来分析问题Q得问题变得Ş象了许多。需要注意的是,q种SG游戏对应的有向图是无环的Q因为如果有环,那么游戏双方可能在环上不停的{换状态,游戏不能在有限步l止Q这样就不满组合游戏的特征3了?br>  然而在很多时候仅仅知道某个状态是必胜q是必|是不够的Q因为如果存在多个组合游戏(比如l典的NimQ,对应的状态集合非常大Q无法直接利用必胜必败态理论求解,因此需要用到博弈论中一个很重要的工PSG函数?br>  某个状态的SG函数值定义ؓ当前状态所有不可达的状态编号中最的~号Q其中终止态的SG函数值是0。有了这个工P引入一个非常强大的定理——SG分解定理Q?br><br>  <span style="background-color: #ffffff; color: red;">多个l合游戏的SG函数值是每个l合游戏的函数值的和?/span>Q这里的和定义ؓ异或操作Q?br>  <br>  SG分解定理的证明不是很难,其实和Nim的证明很像。根据这个定理,我们q道ؓ什么Nim的解法是异或所有的矛_个数了,因ؓ每堆矛_的SG值就是石子的个数。SG分解定理告诉我们MSG游戏都可以{化成Nim游戏来做?br>  Nim中的一个变形就是拿走最后一块石子的人算输。通过修改SG的计规则,可以得出相同的结论(因ؓ当石子个数是1的时候SGgؓ0Q因此要单独处理Q;当然也可以利用一个叫做SJ定理的方法来做,依然是要处理当所有堆的SGg大于1的情c?br><br>【博弈基本模型?br>  除了Nim模型Q很多模型都看似复杂Q最后都划归CNim模型上,然后利用SG分解来做的。在证明两种模型{h的时候,可以通过计算SG值判断是否相同,或者通过判断必胜{略的走法将其{化ؓNim。许多模型非常的奇Q其莯{略又千差万别,因此无法一一列DQ但是掌握一些经典模型是必须的,q样通过模型的{化可以简化问题的隑ֺ?br>  <span style="background-color: yellow;">l典模型1QNim变种?/span>包括Q?br>    (1) 楼梯Nim。把奇数台阶的石子作为NimQ二者等P因ؓ必胜的策略是相同的?br>    (2) 每次可以取k堆,q个是经典的Moore Nim。它是泛化的Nim游戏?br>    (3) 两堆矛_Q每ơ可以取一堆或两堆Q从两堆取得时候个数必ȝ同,谁先取完莯。这个是著名的威佐夫博弈Q跟黄金分割数有养I具体证明不是很清楚,但是用SG值打表可以找律。代码如下: <br> <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: #000000;">#include </span><span style="color: #000000;"><</span><span style="color: #000000;">cstdio</span><span style="color: #000000;">></span><span style="color: #000000;"><br>#include </span><span style="color: #000000;"><</span><span style="color: #000000;">cmath</span><span style="color: #000000;">></span><span style="color: #000000;"><br>#include </span><span style="color: #000000;"><</span><span style="color: #000000;">algorithm</span><span style="color: #000000;">></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> std;<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> main()<br>{<br>    </span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> k </span><span style="color: #000000;">=</span><span style="color: #000000;"> (sqrt(</span><span style="color: #000000;">5.0</span><span style="color: #000000;">) </span><span style="color: #000000;">+</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">) </span><span style="color: #000000;">/</span><span style="color: #000000;"> </span><span style="color: #000000;">2.0</span><span style="color: #000000;">;<br>    </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> a, b, t;<br><br>    </span><span style="color: #0000ff;">while</span><span style="color: #000000;"> (scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d %d</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">&</span><span style="color: #000000;">a, </span><span style="color: #000000;">&</span><span style="color: #000000;">b) </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #000000;">2</span><span style="color: #000000;">)<br>    {<br>        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (a </span><span style="color: #000000;">></span><span style="color: #000000;"> b)<br>            swap(a, b);<br>        t </span><span style="color: #000000;">=</span><span style="color: #000000;"> b </span><span style="color: #000000;">-</span><span style="color: #000000;"> a;<br>        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (a </span><span style="color: #000000;">==</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)(t </span><span style="color: #000000;">*</span><span style="color: #000000;"> k))<br>            puts(</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>        </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>            puts(</span><span style="color: #000000;">"</span><span style="color: #000000;">1</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>    }<br><br>    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div> <br>    (4) Subtraction Games。一U通用的Nim游戏Q每ơ从可用状态集合中选择下一步的状态,有很多变形,核心思想q是计算SG函数倹{?br>    (5) Take-and-Break Game。每ơ把局面分成多个Nim子游戏,利用SG分解定理求出对应的SG倹{?br>  <span style="background-color: yellow;">l典模型2Q翻币游戏(Coin Turning Game)</span><br>    (1) 一l的ȝ币游戏,每次可以?个或两个。通过单独考虑每个可以ȝ币发现QCoin Turning Game的SG值和Nim{hQ因此两个模型等仗需要注意的是,许多ȝ币游戏根据题目的要求Q一般编号从0开始?br>    (2) 一l的ȝ币游戏,每次可以?个或两个Q限定了ȝ二枚币的范_那么和Subtraction Game{h了?br>    (3) 一l的ȝ币游戏,每次可以?个?个或3个,q个游戏叫做Mock TurtlesQ有一个神奇的规律Q是Odious Number序列?br>    (4) 高维的翻币游戏Q需要用到NimU和Tartan定理?br>  ȝ币模型的变化更多Q很多模型都有一些奇妙的规律Q需要打表才能发现?br>  <span style="background-color: yellow;">l典模型3Q删Ҏ?Green Hackenbush)</span><br>    (1) 树的删边游戏QColon原理证明q种模型和Nim依然是等LQ多个叉的SG值异或就是对应根节点的SG倹{?br>    (2) 无向囑ֈҎ戏:利用Fursion定理收羃圈,然后p{换成树的删边游戏了,不过q个定理q不会证? <br><br>注:本文作于2009q???09?3?br><br> <img src ="http://m.shnenglu.com/sdfond/aggbug/107364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/sdfond/" target="_blank">sdfond</a> 2010-02-06 08:55 <a href="http://m.shnenglu.com/sdfond/archive/2010/02/06/107364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU 3244 Difference between Tripletshttp://m.shnenglu.com/sdfond/archive/2009/07/14/89999.htmlsdfondsdfondTue, 14 Jul 2009 02:34:00 GMThttp://m.shnenglu.com/sdfond/archive/2009/07/14/89999.htmlhttp://m.shnenglu.com/sdfond/comments/89999.htmlhttp://m.shnenglu.com/sdfond/archive/2009/07/14/89999.html#Feedback0http://m.shnenglu.com/sdfond/comments/commentRss/89999.htmlhttp://m.shnenglu.com/sdfond/services/trackbacks/89999.html  定义两个三元lI(xi, yi, zi)和J(xj, yj, zj)Q他们的差ؓD(I, J) = max{xi - xj, yi - yj, zi - zj} - min{xi - xj, yi - yj, zi - zj}Q给定n个三元组Qn <= 200000Q,求Q意两个三元组的差的和?br>
【题目分析?br>  数据范围非常大,枚D必然不可Q需要数学方法。这个题目y妙之处在于,模型l过了层层的包装Q要想一下子有想法还真不Ҏ。既然不能枚举了Q这个max和min操作׃好办了,应该设法L。max{a, b, c} - min{a, b, c} = |a - b| + |b - c| + | c - a| / 2Q这个公式应该不难想刎ͼ但是q只是第一步,因ؓ引进了绝对|依然不好做。可以先出分子Q最后再?。接下来需要一个等价变换,以a - bZQa - b = xi - xj - yi + yj = (xi - yi) - (xj - yj)Q同理把b - c、c - a都写成这UŞ式。这一步变换看g用不大,但是假设我们出所有的xi - yi之后Qi = 0... n - 1Q,其排序Q会发现Q对于第i个xi - yiQ它前面的都比它,后面的都比它大。而实际上Q由于求L两个三元l的差,肯定xi - yi会和L的xj - yj都作差的Q加了绝对值后Q它Ҏ后的l果׃贡献i?xi - yi)Qn - i - 1?(xi - yi)。同LҎ出所有的(yi - zi)?zi - xi)Q结果就能够求出来了。算法复杂度O(n * logn)?br>
【题目ȝ?br>  q是一道不错的题目Q首先考察了公式的变ŞQ需要改写max - min操作Q之后的{h变换和排序的思想都非常值得借鉴?br>题目代码Q?br>
#include <cstdio>
#include 
<algorithm>
using namespace std;
const int N = 200010;

int x[N], y[N], z[N];
int main()
{
    
int n, a, b, c;

    
while (scanf("%d"&n) == 1 && n)
    {
        
for (int i = 0; i < n; i++)
        {
            scanf(
"%d %d %d"&a, &b, &c);
            x[i] 
= a - b;
            y[i] 
= b - c;
            z[i] 
= c - a;
        }
        sort(x, x 
+ n);
        sort(y, y 
+ n);
        sort(z, z 
+ n);
        
long long ans = 0;
        
for (int i = 0; i < n; i++)
            ans 
+= (2 * i + 1 - n) * (long long)(x[i] + y[i] + z[i]);
        printf(
"%I64d\n", ans / 2);
    }

    
return 0;
}


sdfond 2009-07-14 10:34 发表评论
]]>
PKU 1723 SOLDIERShttp://m.shnenglu.com/sdfond/archive/2009/06/25/88486.htmlsdfondsdfondThu, 25 Jun 2009 02:13:00 GMThttp://m.shnenglu.com/sdfond/archive/2009/06/25/88486.htmlhttp://m.shnenglu.com/sdfond/comments/88486.htmlhttp://m.shnenglu.com/sdfond/archive/2009/06/25/88486.html#Feedback0http://m.shnenglu.com/sdfond/comments/commentRss/88486.htmlhttp://m.shnenglu.com/sdfond/services/trackbacks/88486.html  题目大意是给定n个点的坐标(n <= 10000Q,问把q些点移动到一横行q且一个挨着一个(具体位置LQ的最移动步敎ͼ其中每次只能向上下左右移动一个坐标)?br>  q个题目体现了{化的思想。首先考虑q样的问题:一个数轴上有n个坐标,问把qn个坐标移动到一个点上最移动步敎ͼ其中每次Ud一个格子。根据中位数的定义,把所有坐标排序后Wn / 2个坐标是中位敎ͼ把所有坐标移动到q上面移动次数最。证明很Ҏ惛_Q因为如果不q样的话Q把目标坐标往左^U还是往叛_^U,势必造成左半部的坐标集体变化1Q右半部的坐标也集体变化1Q如果左叛_部坐标的个数不同Q那么显然就不是最优的了?br>  接下来考虑题目Q题目中x和y的移动是孤立的,可以分开讨论。y的移动方法和上面讨论的情况一P现在考虑x的移动。x的移动要求最l是一个挨着一个的Qx排好序之后,假设最l所有点以x0为左端点依次排开Q对应的点分别ؓx0, x1...那么问题的答案就{于把这n个坐标依ơ对应的挪到x0到xn-1上的步数。如果我们把qn个目标点分别都移动到x0上,那么问题p{化成了中位数问题了。考虑把xiUd到x0上,要花费i步,Z保证问题是等价变换的Q应该把xi在原坐标中对应的xi'也相应的向左Udi步,q样xi'Ud到xi的代价就是不变的。设xi'左移i步后的新位置是xi''Q那么问题就转化成:把x0''到xn-1''qn个点UdC个坐标的最步敎ͼ用中位数的方法就可以做出来了?br>  q个题目的y妙之处在于把一个未知问题{化成一个已知问题。{化的思想在数学中用的很多Q应该多多练习?br>
题目代码Q?br>

#include <cstdio>
#include 
<algorithm>
using namespace std;
const int N = 10010;

int main()
{
    
int x[N], y[N], n;

    
while (scanf("%d"&n) == 1)
    {
        
for (int i = 0; i < n; i++)
            scanf(
"%d %d"&x[i], &y[i]);
        sort(x, x 
+ n);
        sort(y, y 
+ n);
        
for (int i = 0; i < n; i++)
            x[i] 
-= i;
        sort(x, x 
+ n);
        
int ans = 0;
        
for (int i = 0; i < n / 2; i++)
            ans 
+= x[n-i-1- x[i] + y[n-1-i] - y[i];
        printf(
"%d\n", ans);
    }

    
return 0;
}


sdfond 2009-06-25 10:13 发表评论
]]>
HOJ 2565 高斯消元http://m.shnenglu.com/sdfond/archive/2009/06/10/87357.htmlsdfondsdfondWed, 10 Jun 2009 13:49:00 GMThttp://m.shnenglu.com/sdfond/archive/2009/06/10/87357.htmlhttp://m.shnenglu.com/sdfond/comments/87357.htmlhttp://m.shnenglu.com/sdfond/archive/2009/06/10/87357.html#Feedback0http://m.shnenglu.com/sdfond/comments/commentRss/87357.htmlhttp://m.shnenglu.com/sdfond/services/trackbacks/87357.html   q个题目做得好辛苦。题目大意是l三个算术表辑ּQ前两个相加{于W三个,每位数都用字母代替,问最后字母对应的数是多少。数据范围n <= 26。由于进位不定Q因此需要枚举进位,再用高斯消元求解。我报着试一试的态度敲了一? ^ n * n ^ 3的程序上去,果然时了。不知道应该如何优化Q到|上看了一下,因ؓ每次枚D的都是常敎ͼ因此可以先把每个未知数用帔R表示出来Q这hơ枚丑֛带求解的复杂度就降到了O(n ^ 2)。感觉这U做法很巧妙Q不q实现的时候出了很多问题,搞了一下午才搞? -!
  首先需要保存对于每个变量,它对应的每个常数的系数是多少。开始的时候我列方E的方向想错了,相当成模n域的方程l来求解。结果写了很久之后发现因为n不一定是素数Q所以求解的时候解可能有多个,q样的话比较复杂了。后来一怒之下烦性当成实数域来求解,重新列了方程Q这栯是唯一的了Q但是中间运全是QҎQ很担心_ֺ问题Q交上去居然q了?br>  q个题目加速消元的思想q是很值得借鉴的,高斯消元的优化问题不多,但是感觉都挺有意思,像用u囑֊速高斯消元。根据方E的不同特点来选择合适的优化Ҏ很重要啊?



sdfond 2009-06-10 21:49 发表评论
]]>
博弈论的一些题?/title><link>http://m.shnenglu.com/sdfond/archive/2009/05/31/86318.html</link><dc:creator>sdfond</dc:creator><author>sdfond</author><pubDate>Sun, 31 May 2009 13:53:00 GMT</pubDate><guid>http://m.shnenglu.com/sdfond/archive/2009/05/31/86318.html</guid><wfw:comment>http://m.shnenglu.com/sdfond/comments/86318.html</wfw:comment><comments>http://m.shnenglu.com/sdfond/archive/2009/05/31/86318.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/sdfond/comments/commentRss/86318.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/sdfond/services/trackbacks/86318.html</trackback:ping><description><![CDATA[先把题目贴出来,ȝ再说Q?br>POJ 2234 Matches Game<br>HOJ 2533 Stone II<br>POJ 2975 Nim<br>HOJ 1367 A Stone Game<br>POJ 2505 A multiplication game<br>ZJU 3057 beans game<br>POJ 1067 取石子游?br>POJ 2484 A Funny Game<br>POJ 2425 A Chess Game<br>POJ 2960 S-Nim<br>POJ 1704 Georgia and Bob<br>POJ 1740 A New Stone Game<br>POJ 2068 Nim<br>POJ 3480 John<br>POJ 2348 Euclid's Game<br>HOJ 2645 WNim<br>POJ 3710 Christmas Game <br>POJ 3533 Light Switching Game <br> <img src ="http://m.shnenglu.com/sdfond/aggbug/86318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/sdfond/" target="_blank">sdfond</a> 2009-05-31 21:53 <a href="http://m.shnenglu.com/sdfond/archive/2009/05/31/86318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高斯消元?/title><link>http://m.shnenglu.com/sdfond/archive/2009/05/26/85820.html</link><dc:creator>sdfond</dc:creator><author>sdfond</author><pubDate>Tue, 26 May 2009 09:13:00 GMT</pubDate><guid>http://m.shnenglu.com/sdfond/archive/2009/05/26/85820.html</guid><wfw:comment>http://m.shnenglu.com/sdfond/comments/85820.html</wfw:comment><comments>http://m.shnenglu.com/sdfond/archive/2009/05/26/85820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/sdfond/comments/commentRss/85820.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/sdfond/services/trackbacks/85820.html</trackback:ping><description><![CDATA[  高斯消元法用于求解线性方E组Q采用选主元的ҎQ算法复杂度O(N ^ 3)。相应的题型一U是在实数域q行求解Q一U是在整数域求解Q一般涉及到取模。实数域的求解比较简单,整数域需要注意几个问题。模p一定是素数Q因Z是素数的话求解的时候可能会出现多个解,处理h比较ȝ。一个特D的情况是模2域下的求解,可以采用位运优化。还有一点要注意的是在最开始构造系数矩阵和增广矩阵的时候,一定要先模pQ否则选主元的时候一些模p?的系C被误选?br>  高斯消元法另一个需要讨论的地方是解的情况。分为无解、唯一解和无穷解。这三种情况ҎU性代数的知识很容易判断,主要是看系数阵的秩和增qK的秩。如果某一ơ选主元发现当前列的系数都?Q那么对应的变量是一个自由变元,解不定。这个时候要跌q一列,保持行不变,l箋q行消元。在消元之后查看增广늚U确定是否无解,若有解再Ҏ自由变元是否存在来判断是否是唯一解?br>  如果解是无穷多个的时候,需要枚丑֏元的取倹{一般用于处理解I间很小的情况,比如在模2域上的求解。枚丑֏元后无需重新列方E,只需q行一ơ回带找解即可?<img src ="http://m.shnenglu.com/sdfond/aggbug/85820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/sdfond/" target="_blank">sdfond</a> 2009-05-26 17:13 <a href="http://m.shnenglu.com/sdfond/archive/2009/05/26/85820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>龙贝格积?/title><link>http://m.shnenglu.com/sdfond/archive/2009/05/20/83506.html</link><dc:creator>sdfond</dc:creator><author>sdfond</author><pubDate>Wed, 20 May 2009 11:56:00 GMT</pubDate><guid>http://m.shnenglu.com/sdfond/archive/2009/05/20/83506.html</guid><wfw:comment>http://m.shnenglu.com/sdfond/comments/83506.html</wfw:comment><comments>http://m.shnenglu.com/sdfond/archive/2009/05/20/83506.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/sdfond/comments/commentRss/83506.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/sdfond/services/trackbacks/83506.html</trackback:ping><description><![CDATA[<p>  龙贝格积分的基本思想是先利用复化梯形公式把曲线划分若干区_把每个小区间当成梯Ş来求和;然后每次区间数加倍,直到收敛C定精度范围内为止?br>  E序基本参照计算Ҏ的书写的Q但是开始写完之后发现巨慢。找了网上一个版本和我的比较下,发现我们俩只是二l数l的两个l代表的含义互换了,但是旉复杂度完全相同。后来改了一下发现居然快很多Q囧。之后可以过JOJ 2457。但是仍然过不了HOJ 2539。一旦把_ֺ调高TLEQ郁闗?br>  后来扑ֈ了liuyu大牛曄写过的rombergU分模板Q发现巨快,研究了一下发C把那个T数组巧妙的压~成了一l_但是L间复杂度不变Q不知道Z么那么快Q也许是因ؓ二维数组遍历的时候寻址比较耗时间吧。按照他的方法改了下Q仍然过不了Q但是这回是WA。找了很久发现在更新的时候每ơ乘以定值就会WAQ用pow才可以过Q估计是数据的精度有问题。改了之后终于过了,速度很快:-)</p><img src ="http://m.shnenglu.com/sdfond/aggbug/83506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/sdfond/" target="_blank">sdfond</a> 2009-05-20 19:56 <a href="http://m.shnenglu.com/sdfond/archive/2009/05/20/83506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速傅里叶变换http://m.shnenglu.com/sdfond/archive/2009/05/18/83287.htmlsdfondsdfondMon, 18 May 2009 08:01:00 GMThttp://m.shnenglu.com/sdfond/archive/2009/05/18/83287.htmlhttp://m.shnenglu.com/sdfond/comments/83287.htmlhttp://m.shnenglu.com/sdfond/archive/2009/05/18/83287.html#Feedback0http://m.shnenglu.com/sdfond/comments/commentRss/83287.htmlhttp://m.shnenglu.com/sdfond/services/trackbacks/83287.html  多项式有两种表示Q系数Ş式和点DC。如果把两个多项式写成点值Ş式,那么怹的复杂度是O(n)的。FFT的基本思想是通过把系数Ş式化成点值Ş式,怹之后再化回来Q得复杂度降到O(nlogn)。具体就是先通过巧妙地选取n个复数单位根Q利用复数的一些非常好的性质求得DFTQ把q一步的复杂度降到O(nlogn)Q然后将得到的点值相乘后Q利用插值再变换成系数Ş式。插值的q程居然和求DFT的过E惊人的怼Q复杂度依然为O(nlogn)?br>  在实现的时候基本参照算法导论,感觉递归不太好写Q就写了个P代的。N久不用复CQ连基本q算都忘了,D实现的时候出了一堆错Q后来好不容易写好了Q结果却一炚w不靠谱。查了好久才发现Q初始w?的时候,我把实部和虚部都设成1了,囧。实际上虚部应该?。改完后发现多项式的表示又出了问题,后来发现我把pL的顺序写反了。然后利用这个做了HDU 1402Q就是高_ֺ乘法。WA了几ơ,很抓狂。后来写了一个程序跑了一l极限数据,居然挂了。仔l观察后发现是精度的问题。因为FFT中间q算q程都是点敎ͼ但是最后要输出整数Q取整的时候舍入精度出了问题,加了1e-3之后q了?br>  q有一道比较y妙的FFT的题目,SRM 436 DIV 1 1000ptQ做的时候开始Z0忘记取模了,l果q以为是模板的问题,找了很长旉才发现。做题还是要l心啊?img src ="http://m.shnenglu.com/sdfond/aggbug/83287.html" width = "1" height = "1" />

sdfond 2009-05-18 16:01 发表评论
]]>
ھƷѾþӰԺ| þۺϾɫۺŷȥ| 㽶þۺӰ| ƷŮͬþþþõӰԺ| žžþȻ㽶ͼƬ| Ʒþþþþù˽| 99ƷþþƷһ| ھƷ˾þþþվ| ھƷþþþӰԺ޹²| 99ƷȾþ| þþƷȫۿ| ŮHҳþþ| Ʒþþþþþö| ùƷӰ˾þ| þþƷAVũ帾Ů| þùŮѹۿƷ| Ʒþþþþ| ۺϾþһ| þùƷþùƷ| þˬˬƬAV鷳 | Ʒһþ| þùֱ| þþƷ99þ㽶| þþƷһ| þۺϹɫ88þþƷۺ | ƷþþþAV| Ļþһ| ѾþþƷѾѾ| þݹֻƬ| ޹Ʒþþϼ2| þþþþþþ66ƷƬ| þþƷĻ23ҳ| 9391ƷۺϾþ㽶| þþþþþĻ| þþƷƵһ| ޾ƷƬþ| þþƷձҰ| ŷþþþƷӰԺ| ɫۺϾþĻۺ| þۺ77777鶹| ɫ͵͵91þۺ|