﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Mato is No.1-随笔分类-HNOI</title><link>http://www.cppblog.com/MatoNo1/category/19198.html</link><description>Mato是一只超级大沙茶……比赛结果从后往前排列，Mato总是No.1……</description><language>zh-cn</language><lastBuildDate>Tue, 24 Apr 2012 13:34:41 GMT</lastBuildDate><pubDate>Tue, 24 Apr 2012 13:34:41 GMT</pubDate><ttl>60</ttl><item><title>HNOI2011 部分题题解</title><link>http://www.cppblog.com/MatoNo1/archive/2012/04/24/172656.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Tue, 24 Apr 2012 13:25:00 GMT</pubDate><guid>http://www.cppblog.com/MatoNo1/archive/2012/04/24/172656.html</guid><wfw:comment>http://www.cppblog.com/MatoNo1/comments/172656.html</wfw:comment><comments>http://www.cppblog.com/MatoNo1/archive/2012/04/24/172656.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MatoNo1/comments/commentRss/172656.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MatoNo1/services/trackbacks/172656.html</trackback:ping><description><![CDATA[【最近很想被各种省选题虐&#8230;&#8230;于是，就开始找各种省选题&#8230;&#8230;发现能虐本沙茶的实在是太多了（谁叫我是沙茶呢囧）】<br /><br />homework：<br />很能令人想歪的题目&#8230;&#8230;想到某种数论模型&#8230;&#8230;<br />正解是递推+矩阵优化。可以这么想，本题如果暴力递推的话，设F[i]为1到i组成的数（具体的数，不是取模以后的结果，虽然这个值是无法存储的），则有F[i]=(F[i-1]*10<sup>T</sup>)+i，其中T是i在十进制下的位数，边界F[0]=0。这个式子是可以矩阵优化的，矩阵为<br />10<sup>T</sup> 0 0<br />1 1 0<br />1 1 1<br />则1*3矩阵[F[i-1], i-1, 1]乘以这个矩阵之后就是[F[i], i, 1]，然后对于各个T分开处理一下就行了&#8230;&#8230;这里的取模完全就是个幌子&#8230;&#8230;<br />（另外，矩阵优化递推是一个很重要的专题&#8230;&#8230;）<br /><br />race：<br />（最近刚好在某MO神犇的资料里面看到了柯西不等式&#8230;&#8230;发现此题可以用这个来搞&#8230;&#8230;就囧掉了）<br />柯西不等式：(a<sub>1</sub><sup>2</sup>+a<sub>2</sub><sup>2</sup>+...+a<sub>n</sub><sup>2</sup>)(b<sub>1</sub><sup>2</sup>+b<sub>2</sub><sup>2</sup>+...+b<sub>n</sub><sup>2</sup>)&gt;=(a<sub>1</sub>b<sub>1</sub>+a<sub>2</sub>b<sub>2</sub>+...+a<sub>n</sub>b<sub>n</sub>)<sup>2</sup>&nbsp; 【*】，<br />等号成立当且仅当对于任意1&lt;=i, j&lt;=n, i&#8800;j，有a<sub>i</sub>b<sub>j</sub>-a<sub>j</sub>b<sub>i</sub>=0，也就是(a<sub>1</sub>, b<sub>1</sub>), (a<sub>2</sub>, b<sub>2</sub>)...(a<sub>n</sub>, b<sub>n</sub>)这n个点共线。具体证明的话，把两边的乘法列成一个矩阵的形式，去掉主对角线（相同），把关于主对角线对称的位置对应相减，得到类似叉积的平方和的形式即可。<br /><br /><div><font class="UNICODE">对于本题，假设不考虑耗油量为负时取0的情况，设F0=(F-</font><font class="UNICODE">&#931;(b*L<sub>i</sub>*S<sub>i</sub>))/a，则问题就转化为求一组v<sub>i</sub>使得</font><font class="UNICODE">&#931;L<sub>i</sub>v<sub>i</sub>=F0且</font><font class="UNICODE">&#931;(L<sub>i</sub>/v<sub>i</sub>)的值最小。这样，可以设a<sub>i</sub>=sqrt(L<sub>i</sub>/v<sub>i</sub>)，b<sub>i</sub>=sqrt(L<sub>i</sub>v<sub>i</sub>)，代入【*】式&#8230;&#8230;傻眼了囧&#8230;&#8230;不仅能得到最小值，还能发现取得最小值时所有的v都相等，且可以算出来&#8230;&#8230;当然如果F0&lt;0就无解了囧&#8230;&#8230;<br />不过本题最囧的问题是对于耗油量为负的情况。最好的处理办法是，如果按照【*】式得到的v值会导致某些s&lt;0的路段耗油量为负，则对于这些路段单独处理，使得它们的耗油量刚好为0（除非此时的速度已超过上限），并将它们删去，然后对于剩下的路段，重新代入(*)式计算v，直到不出现耗油量为负的情况即可。当然，如果在此过程中出现F0&lt;0，就无解了。<br /><br />brackets：<br />这个应该不用再说了，直接看<a title="这里" href="http://www.cppblog.com/MatoNo1/archive/2011/07/23/151685.html">这里</a>。<br /><br />rectangle：<br />思想比较巧妙的话说&#8230;&#8230;应该枚举线段，按照中点和线段长度进行排序（因为两条线段若能组成矩形的两对角线，则它们必然等长，且中点重合），然后扫一遍，顺带枚举就是了&#8230;&#8230;表面上来看时间复杂度可能到O(N<sup>3</sup>)级别，其实根本无法出卡这种方法的数据&#8230;&#8230;<br /><br />canon：<br />这个没什么好说的，就是硬推公式，结果为<br />(C(2<sup>n</sup>, m) - C(2<sup>n-1</sup>, m/2)) / 2<sup>n</sup> + C(2<sup>n-1</sup>, m/2) （当m % 4 == 0或3时）<br /><div>(C(2<sup>n</sup>, m) + C(2<sup>n-1</sup>, m/2)) / 2<sup>n</sup> - C(2<sup>n-1</sup>, m/2) （当m % 4 == 0或3时）</div>对于当中的取模问题：加、乘直接取模；减法要在取模后判定是否小于0，若小于0再加上待取模数；除法要转化为乘逆元（反正这里的MOD都是质数&#8230;&#8230;）<br /><br /></font></div><img src ="http://www.cppblog.com/MatoNo1/aggbug/172656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MatoNo1/" target="_blank">Mato_No1</a> 2012-04-24 21:25 <a href="http://www.cppblog.com/MatoNo1/archive/2012/04/24/172656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>