﻿<?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++博客-klion26-随笔分类-数学</title><link>http://www.cppblog.com/klion/category/13667.html</link><description>klion26's blog</description><language>zh-cn</language><lastBuildDate>Tue, 30 Nov 2010 14:45:56 GMT</lastBuildDate><pubDate>Tue, 30 Nov 2010 14:45:56 GMT</pubDate><ttl>60</ttl><item><title>USACO 4_1_1 Beef McNuggets</title><link>http://www.cppblog.com/klion/archive/2010/11/26/134743.html</link><dc:creator>Klion</dc:creator><author>Klion</author><pubDate>Fri, 26 Nov 2010 10:36:00 GMT</pubDate><guid>http://www.cppblog.com/klion/archive/2010/11/26/134743.html</guid><wfw:comment>http://www.cppblog.com/klion/comments/134743.html</wfw:comment><comments>http://www.cppblog.com/klion/archive/2010/11/26/134743.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/klion/comments/commentRss/134743.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klion/services/trackbacks/134743.html</trackback:ping><description><![CDATA[<a href="http://www.nocow.cn/index.php/Translate:USACO/nuggets">题目意思</a><br>我的想法:首先把一些能表达的数给算出来,存起来.然后再看是不是都能表示或者没有最大值.算出能表达的数我采用的是dp.这里的dp,比如说有给你三个数3 6 10要你求用这三个数能表达的一系列数,首先我用一个数组can[]记录所有能表达的数,can[i]=j表示这些能表达的数按升序排列地i个是j.再用数组记录下3 6 10这三个数和can数组里面的某个数相加时所到的下表(说的很拗口- -)<br>比如说我用idx[0]记录3这个数和can数组的第idx[0]个数相加,idx[1]表示6和can数组的第idx[1]个数相加.等等。下面用具体写下过程.<br>首先置can[0] = 0&nbsp; idx[0] = idx[1] = idx[2] = 0;(也就是说3 6 10接下来会和can数组的第0个相加)<br>下标&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&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; 3&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; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; can&nbsp;&nbsp; 0&nbsp;&nbsp; 3(3+can[0])&nbsp; 6(3+can[1]/6+can[0])&nbsp; 9(3+can[2]/6+can[1])&nbsp;&nbsp; 10(10+can[0])&nbsp;&nbsp; 12(3+can[3]/6+can[2])&nbsp; <br>3&nbsp;&nbsp; idx[0]&nbsp;&nbsp; 0&nbsp; 1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2&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; 3&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; 3 &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>6&nbsp;&nbsp; idx[1]&nbsp;&nbsp; 0&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&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; 2&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; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>10 idx[2]&nbsp;&nbsp; 0&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 &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 &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; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>中间我还加了些东西,也就是说如果只有一个元素的话,那么一定是输出0的(要不是都能表示[这个数是1]要不是无最大值)<br>如果有一个元素是1的话,那么一定输出0(所有的都能表示)<br>如果只有两个数的话,那么我们可以直接得到答案,如果两个数互素的话,结果是a*b-a-b,如果不互素的话输出0(无最大值)<br>如果是等差数列的话,输出0(无最大值)<br>其他的就直接算出能表示的数,再判断输出什么<br>官方的解题报告说 <span style="COLOR: red">只要所有的数的gcd不是1就没有最大值</span>,其实这一点可以由上面2个数的公式推出来,也就是先求前n-1个数的gcd然后再求gcd和第n个数的gcd,那么这样的话,这题还有一个数论方法,也就是直接算前n-1个数的gcd,然后看这个gcd和第n个数的gcd是否为1,不为1就输出0,为1就用a*b-a-b这个公式算<br>代码如下&nbsp;&nbsp;&nbsp;&nbsp;
<div class=source style="COLOR: #f5deb3; FONT-FAMILY: '[object htmloptionelement]','consolas','lucida console','courier new'; BACKGROUND-COLOR: #2f4f4f"><span style="COLOR: #da70d6">/*</span><br><span style="COLOR: #da70d6">&nbsp;&nbsp;&nbsp; ID:qcx97811</span><br><span style="COLOR: #da70d6">&nbsp;&nbsp;&nbsp; LANG:C++</span><br><span style="COLOR: #da70d6">&nbsp;&nbsp;&nbsp; PROG:nuggets</span><br><span style="COLOR: #da70d6">*/</span><br><span style="COLOR: #eeee00">#include &lt;stdio.h&gt;</span><br><span style="COLOR: #eeee00">#include &lt;string.h&gt;</span><br><span style="COLOR: #eeee00">#include &lt;stdlib.h&gt;</span><br><span style="COLOR: #eeee00">#include &lt;math.h&gt;</span><br><br><span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> n;<br><span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">16</span><span style="COLOR: #f5deb3">];</span><br><span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">idx</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">16</span><span style="COLOR: #f5deb3">],</span><span style="COLOR: #f5deb3">total_idx</span>;<br><span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">2000000</span><span style="COLOR: #f5deb3">];</span><br><span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">cmp</span>(<span style="FONT-WEIGHT: bold; COLOR: #b0c4de">const</span> <span style="FONT-WEIGHT: bold; COLOR: #98fb98">void</span> <span style="COLOR: #f5deb3">*</span><span style="COLOR: #f5deb3">a</span><span style="COLOR: #f5deb3">,</span><span style="FONT-WEIGHT: bold; COLOR: #b0c4de">const</span> <span style="FONT-WEIGHT: bold; COLOR: #98fb98">void</span> <span style="COLOR: #f5deb3">*</span>b)<br><span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//快速排序从小到大模板</span><br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">*</span><span style="COLOR: #f5deb3">c</span> <span style="COLOR: #f5deb3">=</span> (<span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">*</span>)<span style="COLOR: #f5deb3">a</span>;<br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">*</span><span style="COLOR: #f5deb3">d</span> <span style="COLOR: #f5deb3">=</span> (<span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">*</span>)b;<br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">if</span>(<span style="COLOR: #f5deb3">*</span><span style="COLOR: #f5deb3">c</span> <span style="COLOR: #f5deb3">&gt;</span> <span style="COLOR: #f5deb3">*</span><span style="COLOR: #f5deb3">d</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">return</span> <span style="COLOR: #add8e6">1</span>;<br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">if</span>(<span style="COLOR: #f5deb3">*</span><span style="COLOR: #f5deb3">c</span> <span style="COLOR: #f5deb3">==</span> <span style="COLOR: #f5deb3">*</span><span style="COLOR: #f5deb3">d</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">return</span> <span style="COLOR: #add8e6">0</span>;<br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">return</span> <span style="COLOR: #f5deb3">-</span><span style="COLOR: #add8e6">1</span>;&nbsp;&nbsp;&nbsp; <br><span style="COLOR: #f5deb3">}</span><br><span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">gcd</span>(<span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">a</span><span style="COLOR: #f5deb3">,</span><span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> b)<br><span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//公约数</span><br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">tmp</span>;<br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">if</span>(<span style="COLOR: #f5deb3">a</span> <span style="COLOR: #f5deb3">&lt;</span> b)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">tmp</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #f5deb3">a</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">a</span> <span style="COLOR: #f5deb3">=</span> b;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b <span style="COLOR: #f5deb3">=</span><span style="COLOR: #f5deb3">tmp</span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">while</span>(b)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">tmp</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #f5deb3">a</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">a</span> <span style="COLOR: #f5deb3">=</span> b;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #f5deb3">tmp</span><span style="COLOR: #f5deb3">%</span>b;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">return</span> <span style="COLOR: #f5deb3">a</span>;<br><span style="COLOR: #f5deb3">}</span><br><span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">main</span>(<span style="FONT-WEIGHT: bold; COLOR: #98fb98">void</span>)<br><span style="COLOR: #f5deb3">{</span><br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">freopen</span>(<span style="COLOR: #7fffd4">"nuggets.in"</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #7fffd4">"r"</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #f5deb3">stdin</span>);<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">freopen</span>(<span style="COLOR: #7fffd4">"nuggets.out"</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #7fffd4">"w"</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #f5deb3">stdout</span>);<br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">i</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #f5deb3">j</span>;<br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #98fb98">int</span> <span style="COLOR: #f5deb3">k</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #f5deb3">tmp</span>;<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">scanf</span>(<span style="COLOR: #7fffd4">"%d"</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #f5deb3">&amp;</span>n);<br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">for</span>(<span style="COLOR: #f5deb3">i</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #add8e6">0</span>;<span style="COLOR: #f5deb3">i</span> <span style="COLOR: #f5deb3">&lt;</span> n;<span style="COLOR: #f5deb3">i</span><span style="COLOR: #f5deb3">++</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//scanf</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">scanf</span>(<span style="COLOR: #7fffd4">"%d"</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #f5deb3">&amp;</span><span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">i</span><span style="COLOR: #f5deb3">]);</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">qsort</span>(<span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">,</span>n<span style="COLOR: #f5deb3">,</span><span style="FONT-WEIGHT: bold; COLOR: #b0c4de">sizeof</span>(<span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">]),</span><span style="COLOR: #f5deb3">cmp</span>);<span style="COLOR: #da70d6">//sort the number</span><br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">if</span>((<span style="COLOR: #add8e6">1</span> <span style="COLOR: #f5deb3">==</span> <span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">])</span> || (<span style="COLOR: #add8e6">1</span> <span style="COLOR: #f5deb3">==</span> n))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//only one num or an one in the num</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">printf</span>(<span style="COLOR: #7fffd4">"0</span><span style="COLOR: #7fffd4">\n</span><span style="COLOR: #7fffd4">"</span>);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">return</span> <span style="COLOR: #add8e6">0</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span> <br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">else</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">memset</span>(<span style="COLOR: #f5deb3">idx</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">,</span><span style="FONT-WEIGHT: bold; COLOR: #b0c4de">sizeof</span>(<span style="COLOR: #f5deb3">idx</span>));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">memset</span>(<span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">,</span><span style="FONT-WEIGHT: bold; COLOR: #b0c4de">sizeof</span>(<span style="COLOR: #f5deb3">can</span>));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">if</span>(<span style="COLOR: #add8e6">2</span> <span style="COLOR: #f5deb3">==</span> n)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//2个数的话可以直接算出来</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">if</span>(<span style="COLOR: #add8e6">1</span> <span style="COLOR: #f5deb3">==</span> <span style="COLOR: #f5deb3">gcd</span>(<span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">],</span><span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">1</span><span style="COLOR: #f5deb3">]))</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//如果互素的话</span><br>&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; <span style="COLOR: #f5deb3">printf</span>(<span style="COLOR: #7fffd4">"%d</span><span style="COLOR: #7fffd4">\n</span><span style="COLOR: #7fffd4">"</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">*</span><span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">1</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">-</span><span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">-</span><span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">1</span><span style="COLOR: #f5deb3">]);</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">return</span> <span style="COLOR: #add8e6">0</span>; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">else</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//不互素 肯定无</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">printf</span>(<span style="COLOR: #7fffd4">"0</span><span style="COLOR: #7fffd4">\n</span><span style="COLOR: #7fffd4">"</span>);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">return</span> <span style="COLOR: #add8e6">0</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">tmp</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">1</span><span style="COLOR: #f5deb3">]</span> <span style="COLOR: #f5deb3">-</span> <span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">];</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">for</span>(<span style="COLOR: #f5deb3">i</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #add8e6">2</span>;<span style="COLOR: #f5deb3">i</span> <span style="COLOR: #f5deb3">&lt;</span> n;<span style="COLOR: #f5deb3">i</span><span style="COLOR: #f5deb3">++</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//看是否为等差数列</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">if</span>(<span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">i</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">-</span><span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">i</span><span style="COLOR: #f5deb3">-</span><span style="COLOR: #add8e6">1</span><span style="COLOR: #f5deb3">]</span> <span style="COLOR: #f5deb3">!=</span> <span style="COLOR: #f5deb3">tmp</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">break</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">if</span>(<span style="COLOR: #f5deb3">i</span> <span style="COLOR: #f5deb3">==</span> n)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//如果是等差数列的话 也不可能有</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">printf</span>(<span style="COLOR: #7fffd4">"0</span><span style="COLOR: #7fffd4">\n</span><span style="COLOR: #7fffd4">"</span>);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">return</span> <span style="COLOR: #add8e6">0</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">]</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #add8e6">0</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">total_idx</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #add8e6">0</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">for</span>(<span style="COLOR: #f5deb3">i</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">];</span><span style="COLOR: #f5deb3">i</span> <span style="COLOR: #f5deb3">&lt;</span> <span style="COLOR: #add8e6">2000000</span>;<span style="COLOR: #f5deb3">i</span><span style="COLOR: #f5deb3">++</span> )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//下标是为了不超过内存16M 同时最大</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">j</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #add8e6">0</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">for</span>(<span style="COLOR: #f5deb3">k</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #add8e6">1</span>;<span style="COLOR: #f5deb3">k</span> <span style="COLOR: #f5deb3">&lt;</span> n;<span style="COLOR: #f5deb3">k</span><span style="COLOR: #f5deb3">++</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//增大能表示的数</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">if</span>(<span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">k</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">+</span><span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">idx</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">k</span><span style="COLOR: #f5deb3">]]</span><span style="COLOR: #f5deb3">&lt;</span><span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">j</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">+</span><span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">idx</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">j</span><span style="COLOR: #f5deb3">]])</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">j</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #f5deb3">k</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">tmp</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">j</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">+</span><span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">idx</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">j</span><span style="COLOR: #f5deb3">]];</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">++</span><span style="COLOR: #f5deb3">total_idx</span><span style="COLOR: #f5deb3">]</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #f5deb3">tmp</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">if</span>(<span style="COLOR: #f5deb3">total_idx</span> <span style="COLOR: #f5deb3">&gt;</span> <span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">-</span><span style="COLOR: #add8e6">1</span> <span style="COLOR: #f5deb3">&amp;&amp;</span> (<span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">total_idx</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">-</span><span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">total_idx</span><span style="COLOR: #f5deb3">-</span><span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">+</span><span style="COLOR: #add8e6">1</span><span style="COLOR: #f5deb3">]</span> <span style="COLOR: #f5deb3">==</span> <span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">-</span><span style="COLOR: #add8e6">1</span>))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//如果已经找到最大数,因为后面的数都连续了</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">tmp</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #f5deb3">total_idx</span><span style="COLOR: #f5deb3">-</span><span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #add8e6">0</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">+</span><span style="COLOR: #add8e6">1</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">while</span>(<span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">tmp</span><span style="COLOR: #f5deb3">]</span> <span style="COLOR: #f5deb3">-</span> <span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">tmp</span><span style="COLOR: #f5deb3">-</span><span style="COLOR: #add8e6">1</span><span style="COLOR: #f5deb3">]</span> <span style="COLOR: #f5deb3">==</span> <span style="COLOR: #add8e6">1</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//寻找最大的数</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">tmp</span><span style="COLOR: #f5deb3">--</span>;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">printf</span>(<span style="COLOR: #7fffd4">"%d</span><span style="COLOR: #7fffd4">\n</span><span style="COLOR: #7fffd4">"</span><span style="COLOR: #f5deb3">,</span><span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">tmp</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">-</span><span style="COLOR: #add8e6">1</span>);<span style="COLOR: #da70d6">//输出最大数</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">return</span> <span style="COLOR: #add8e6">0</span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">for</span>(<span style="COLOR: #f5deb3">k</span> <span style="COLOR: #f5deb3">=</span> <span style="COLOR: #add8e6">0</span>;<span style="COLOR: #f5deb3">k</span> <span style="COLOR: #f5deb3">&lt;</span> n;<span style="COLOR: #f5deb3">k</span><span style="COLOR: #f5deb3">++</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">{</span><span style="COLOR: #da70d6">//改变相应的下标</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">if</span>(<span style="COLOR: #f5deb3">num</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">k</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">+</span><span style="COLOR: #f5deb3">can</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">idx</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">k</span><span style="COLOR: #f5deb3">]]</span> <span style="COLOR: #f5deb3">==</span> <span style="COLOR: #f5deb3">tmp</span>)<br>&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; <span style="COLOR: #f5deb3">idx</span><span style="COLOR: #f5deb3">[</span><span style="COLOR: #f5deb3">k</span><span style="COLOR: #f5deb3">]</span><span style="COLOR: #f5deb3">++</span>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br><span style="COLOR: #da70d6">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i = 0;i &lt;= total_idx;i++)</span><br><span style="COLOR: #da70d6">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%d\n",can[i]); </span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">printf</span>(<span style="COLOR: #7fffd4">"0</span><span style="COLOR: #7fffd4">\n</span><span style="COLOR: #7fffd4">"</span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #f5deb3">}</span><br>&nbsp;&nbsp;&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #b0c4de">return</span> <span style="COLOR: #add8e6">0</span>;<br><span style="COLOR: #f5deb3">}</span><br></div>
&nbsp; 
<img src ="http://www.cppblog.com/klion/aggbug/134743.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klion/" target="_blank">Klion</a> 2010-11-26 18:36 <a href="http://www.cppblog.com/klion/archive/2010/11/26/134743.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU_2519 组合数的另一种防溢出算法</title><link>http://www.cppblog.com/klion/archive/2010/09/16/126803.html</link><dc:creator>Klion</dc:creator><author>Klion</author><pubDate>Thu, 16 Sep 2010 15:22:00 GMT</pubDate><guid>http://www.cppblog.com/klion/archive/2010/09/16/126803.html</guid><wfw:comment>http://www.cppblog.com/klion/comments/126803.html</wfw:comment><comments>http://www.cppblog.com/klion/archive/2010/09/16/126803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/klion/comments/commentRss/126803.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klion/services/trackbacks/126803.html</trackback:ping><description><![CDATA[<p>转载请注明出处:http://www.klion.0fees.net/?p=47</p>
<p>今天无意中再群里看到有人在讨论计算组合数的一种方法<br>感觉还有点用就记录下来了&nbsp; 稍稍的证明了下&nbsp; 证明不是很严密,看官凑合着看吧<br>c(n,m) = n!/(m!*(n-m)!)<br>如果n和m比较大时 可能会导致中间超过数据范围,不过我们可以直接用递推也就是<br>c(n,m) = c(n-1,m)+c(n-1,m-1)<br>不过下面我们要用另外一种方法来计算这个组合<br>把分子和分母约掉之后就变成了<br>(n*(n-1)*&#8230;&#8230;*(n-m+1))/m!<br>这样上面和下面都是m个元素,我们可能会想到乘1个除1个,这样来避免越界,可是这样会刚好整除吗？不会出现小数使得最后的答案变错吗？其实只要我们按照一定的顺序来乘和除的话,是不会产生小数的,也就是说会一直整除的.下面给出我的简单证明,如有错误,还请指出(这个公式是借的<a href="http://hi.baidu.com/myacmjd/blog/item/53a033eee2bcc7d8b31cb190.html"><u><font color=#800080>这位博主的</font></u></a>)<br>首先我们把上面那个分数写成这样的<br>(n*(n-1)*&#8230;&#8230;*(n-m+1))/(m*(m-1)*&#8230;&#8230;*1)<br>这样的话就相当于n&#8211;&gt;m&nbsp; (n-1)—&gt;(m-1) &#8230;&#8230; (n-m+1)—&gt;1<br>下面先给出主要程序吧<br>f = 1;//最后答案<br>for(i = 1;i &lt;= m;i++)<br>&nbsp; f = f*(i+(n-m))/i;<br>现在主要的是要说明每次乘以(i+(n-m))然后再除以i不会产生小数,我是这么想的,说先i是1,肯定不会有小数,然后i=2,但是分母已经乘过两个数了,肯定有一个奇数,一个偶数,也不会产生小数,同理3的时候也不会,但是4的时候可能会这样想,前面某个数k整除4,那已经别2除掉了一个2,这样会不会产生小数呢?结果是不会的,因为4个相当于2个2,或者1个4,我们可以把除2的那个选择到这4个当中不能出4的那一个数上,这样的话,就剩下了一个能整除4的了,然后其他的就和这里一样了。</p>
</a>
<img src ="http://www.cppblog.com/klion/aggbug/126803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klion/" target="_blank">Klion</a> 2010-09-16 23:22 <a href="http://www.cppblog.com/klion/archive/2010/09/16/126803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Fibonacci Nim的简单分析</title><link>http://www.cppblog.com/klion/archive/2010/09/10/126318.html</link><dc:creator>Klion</dc:creator><author>Klion</author><pubDate>Fri, 10 Sep 2010 06:41:00 GMT</pubDate><guid>http://www.cppblog.com/klion/archive/2010/09/10/126318.html</guid><wfw:comment>http://www.cppblog.com/klion/comments/126318.html</wfw:comment><comments>http://www.cppblog.com/klion/archive/2010/09/10/126318.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/klion/comments/commentRss/126318.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klion/services/trackbacks/126318.html</trackback:ping><description><![CDATA[<p>转载请注明出处:http://www.klion.0fees.net/?p=29</p>
<p>Fibonacci Nim是如下一种游戏</p>
<p>一堆石子有n颗.两人按如下规则轮流取一定的石子。</p>
<p>1.第一个取的至少取1颗,至多取n-1颗</p>
<p>2.每次取的石子数不能超过对手刚取的2倍,最后取完的算赢家。</p>
<p>现在我们需要算出对于某个n,是先手必胜,还是后手必胜。看到题目,基本也就想到一二了,肯定和Fibonacci数列有关,确实。不过怎么个有关法呢？相信只要你动手算几个小数,就会猜出来了,对于n = Fi先手一定必败,否则先手必胜。好了，下面我们就来证明这个结论吧:</p>
<p>首先我们会用到如下三个性质:</p>
<p>I.若K &gt;= N,则状态(N,K)必胜(在这里我们用(N,K)表示还剩下N颗石子,最多能取K颗石子的一个状态)</p>
<p>II.若状态(N,N-1)先手必败,那么状态(N,K)(K&lt;N)必败。</p>
<p>III.若状态(N,K)(K&lt;N)则最后一次取走的石子数不超过2*N/3</p>
<p>下面证明(Fi,K)(K&lt;Fi)必败</p>
<p>一.F1（=2）,F2(=3)显然成立.</p>
<p>二.若F1至Fi成立,则F(i+1)成立</p>
<p>设先手取K颗石子。</p>
<p>&nbsp; 1).若K&gt;=F(i-1)，后手得到状态(N-K,2*K)(N=F(i+1)),2*K&gt;=2*F(i-1)&gt;F(i-1)+F(i-2)=F(i)&gt;N-K.所以后手必胜,也就是先手必败。</p>
<p>&nbsp;2).若K &lt;= F(i-1)</p>
<p>&nbsp;&nbsp;&nbsp; 我们可知(F(i-1),K)必败(假设得到的),所以后手可以使先手达到(F(i),X)(X &lt; F(i))状态</p>
<p>&nbsp; 由性质III可得X &lt;= (2*F(i-1)/3)*2 = 4*F(i-1)/3 = F(i-1)+1/2*F(i-1) &lt;= F(i-1)+F(i-2)=F(i),所以(F(i),X)必败。</p>
<p>下面是n != F(i)</p>
<p>那么(N,N-1)先手必胜。这要使得后手处于&lt;=n的最大的Fibonacci数就行,这样就相当于后手必输,也就是先手必胜。</p>
</a>
<img src ="http://www.cppblog.com/klion/aggbug/126318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klion/" target="_blank">Klion</a> 2010-09-10 14:41 <a href="http://www.cppblog.com/klion/archive/2010/09/10/126318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dynamic Subtraction(博弈)</title><link>http://www.cppblog.com/klion/archive/2010/09/07/126075.html</link><dc:creator>Klion</dc:creator><author>Klion</author><pubDate>Tue, 07 Sep 2010 02:47:00 GMT</pubDate><guid>http://www.cppblog.com/klion/archive/2010/09/07/126075.html</guid><wfw:comment>http://www.cppblog.com/klion/comments/126075.html</wfw:comment><comments>http://www.cppblog.com/klion/archive/2010/09/07/126075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/klion/comments/commentRss/126075.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klion/services/trackbacks/126075.html</trackback:ping><description><![CDATA[
<p>转载请注明出处:http://www.klion.0fees.net/?p=6</p>
<p>Dynamic subtraction.</p>
<p>One can enlarge the class of subtraction games by letting the subtraction set depend on the last move of the opponent.Many early example sappear in Chapter12 of Schuh(1968).Here are two other examples.(For a generalization,see Schwenk(1970).) (a)There is one pile of n chips.The ﬁrst player to move may remove as many chips as desired,at least one chip but not the whole pile.There after,the players alternate moving,each player not being allowed to remove more chips than his opponent took on the previous move.What is an optimal move for the ﬁrst player if n =44?For what values of n does the second player have a win?</p>
<p>题目大意: 有一堆石子,个数为n,两个人轮流,规则如下 第一个取石子的人至少取一个,至多取n-1个。之后每个人不能比前一个人刚取过的石子数多.没得取了算输,</p>
<p>对于这个我们对比较小的n归纳可知,如果n=2^k(k &gt;=0)的话则是P态,否则是N态. 首先我们可以看到1是P态(先手无法取,因为不能取完),2是P态(只能取1个,后手取剩下的一个) 所有的奇数都是N态,因为每次取一个的话,最后只剩下1颗石子的时候一定是由先手取,所以所有的奇数是N态. 如果是偶数的话,第一次取的石子数不能超过一半,而且必须取偶数.如果取奇数个的话,则后手变成了N态,如果取超过一半的石子数的话,那么后手可以一次取完.先手也输了. 所以4是P态 6只能取2,然后后手达到4这个P态,所以先手必输。 下面我们证明当n = 2^k时为P态, 首先i = 0,1,2时结论成立。现在假设n = 2^i(i&gt;=1)时结论成立,令j = i+1;m = 2^j; 我们知道先手第一次取的石子数一定是小于2^i次的,而且从2^j到2^i和2^i到2^j是一样多的数目. 于是我们可以看成先手可不可能通过取走一些石子使得后手处于2^i.其实这样是不可能的,分析如下: 我们把2^j到2^i这些数都同时减去2^i,我们得到2^i,2^i-1,&#8230;&#8230;,1,0,这样就变成了一个2^i的取石子游戏了.我们可以知道在这里先手是必输的(本文如没有特殊说明,则意味着两个选手都按最优的方案执行)。首先我们得到2^(i-1)次,如果先手取的石子数比这个多的话,那么后手可以取走一定的数目使得先手处于2^i这个P态.也就是说先手必输,如果先手取走的数目比2^(i-1)少的话,那么可以得到取完2^j到2^i+1这个2^i个的时候先手也是必输的,也就是说在这个过程中后手同样可以使得先手处于2^i这个P态,这样的话先手必输,所以无论先手怎样取石子,对于n=2^k(k&gt;=0)必输。 这样的话,易知对于n != 2^k(k&gt;=0)的先手必胜。</p><img src ="http://www.cppblog.com/klion/aggbug/126075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klion/" target="_blank">Klion</a> 2010-09-07 10:47 <a href="http://www.cppblog.com/klion/archive/2010/09/07/126075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU 1849&amp;2188 博弈</title><link>http://www.cppblog.com/klion/archive/2010/09/02/125643.html</link><dc:creator>Klion</dc:creator><author>Klion</author><pubDate>Thu, 02 Sep 2010 07:14:00 GMT</pubDate><guid>http://www.cppblog.com/klion/archive/2010/09/02/125643.html</guid><wfw:comment>http://www.cppblog.com/klion/comments/125643.html</wfw:comment><comments>http://www.cppblog.com/klion/archive/2010/09/02/125643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/klion/comments/commentRss/125643.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klion/services/trackbacks/125643.html</trackback:ping><description><![CDATA[2188:这个是上上篇中的第一种报数的博弈,这个主要是看能否化成k*(n+1)(n表示每一次报数的最多的数目)这样就能得到必胜策略了<br>1849:这题可以变成和上一篇中的第一种取火柴游戏一样,也就是取最后一次的胜利,然后把每个棋子所在的坐标看成这堆火柴的数目,接下来就是直接套用上一篇的讲解了,代码简短。而且不易错。
<img src ="http://www.cppblog.com/klion/aggbug/125643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klion/" target="_blank">Klion</a> 2010-09-02 15:14 <a href="http://www.cppblog.com/klion/archive/2010/09/02/125643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU_1907&amp;2509 博弈</title><link>http://www.cppblog.com/klion/archive/2010/08/27/124932.html</link><dc:creator>Klion</dc:creator><author>Klion</author><pubDate>Fri, 27 Aug 2010 04:55:00 GMT</pubDate><guid>http://www.cppblog.com/klion/archive/2010/08/27/124932.html</guid><wfw:comment>http://www.cppblog.com/klion/comments/124932.html</wfw:comment><comments>http://www.cppblog.com/klion/archive/2010/08/27/124932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/klion/comments/commentRss/124932.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klion/services/trackbacks/124932.html</trackback:ping><description><![CDATA[学了三种简单博弈(前一篇)之后,我又在<a href="http://www.wutianqi.com/?p=1081">这篇博文</a>这学了HDU1907的解法<br>下面说下我的理解,有些借鉴原博文。<br><br>这题和下面的题有点相似,但是又不一样<br>也就是说把最后取完的定为输家改成,最后取完的定为赢家。<br>后面的这个要简单一点,下面是简单分析,先来看这个简单的<br>首先我们用T表示当前状态的所有火柴数异或为0,否则极为S。<br>1.S可以转化成T<br>我们设一共有n堆火柴,每堆有k(i)根.<br>那么S态中k(1)^k(2)^&#8230;&#8230;^k(n) != 0,这个值我们记为c<br>那么肯定有某个k(i)的最高位和c的最高位同为1,不然c的最高位变成了0<br>假设这个最高位和c的最高位同为1的是第m堆,这样我们可以得到x = k(m)^c &lt; k(m)(x的最高位为0)<br>k(1)^k(2)^&#8230;&#8230;^x^&#8230;&#8230;^k(n)<br>=k(1)^k(2)^&#8230;&#8230;^k(m)^c^&#8230;&#8230;^k(n)<br>=k(1)^k(2)^&#8230;&#8230;^k(m)^k(m+1)^&#8230;&#8230;^k(n)^(k(1)^k(2)^K(3)^&#8230;&#8230;^k(n))<br>= 0<br>这样我们只要从第m堆中取出k(m)-x根火柴,那么剩下的就变成了T态。<br>2.T一定会转化成S<br>假设T不转化成S,<br>我们从第m堆中取出一定的火柴数那么我们得到<br>0 = k(1)^k(2)^&#8230;&#8230;^k(m)^&#8230;&#8230;^k(n)<br>0 = k(1)^k(2)^&#8230;&#8230;^k(m')^&#8230;&#8230;^k(n)(k(m)表示取之前的 k(m')表示取最后的)<br>那么我们得到k(m)^k(m')=0也就是说k(m)==k(m')矛盾。<br>3.S态,只要方法得当就可以取胜<br>每一个S态可以转化成T态,然后每一个T态必然转化成S态,所以每一次只要把S态变成T态,那么对手就只能把T态变成S态,这样自己就一直控制着S态,最后一定可以取完(变成T态)成为胜利者<br>4.T态,只要对手方法得当就必输<br>同3<br>下面我们来看看该题的思路<br>我们设只有一根火柴的堆为单根堆,否则为充裕堆,充裕堆&gt;=2的T用T2表示,全是单根堆的T用T0表示(没有T1)<br>同样的充裕堆&gt;=2的S用S2表示,全为单根堆的S用S0表示,只有一堆充裕堆的用S1表示<br>5.S0必败,T0必胜<br>每次自己取奇数堆的,那么最后一堆一定由自己取.T0必胜同理<br>6.S1只要方法得当,必胜<br>如果单根堆的堆数为偶数,那么把充裕堆中取成只剩下1根,变成S0,对手必败.如果单根堆的堆数为奇数,那么把充裕堆全取完,同样对手必败<br>7.S2不可以一次转化到T0<br>每次最多只能取完一堆,所以2堆充裕堆不可能一次就没了<br>8.S2可以一次变成T2<br>用1可知S可以变成T,由7可知S不可一次变成T0,所以S可以一次变成T2<br>9.T2不可以一次变成S0<br>同7<br>10.T2一定变成S1或者S2中的一种<br>由2知T一定变成S,由9知T2不可一次变成S0,所以一定变成S1或S2中的一种<br>11.S2,只要方法得当一定胜<br>S2可以变成T2,然T2一定变成S1或者S2,如果变成S1,已胜,变成S2,则继续,直到T2只能变成S1为止。<br>12.T2,只要对手方法得当必输<br>同11<br>综上所述先手必胜态为T0 S2 S1<br>必输态为S0 T2 <br><br>到这这两题就可以轻松搞定了。 
<img src ="http://www.cppblog.com/klion/aggbug/124932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klion/" target="_blank">Klion</a> 2010-08-27 12:55 <a href="http://www.cppblog.com/klion/archive/2010/08/27/124932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>三种简单博弈问题的简单介绍</title><link>http://www.cppblog.com/klion/archive/2010/08/25/124698.html</link><dc:creator>Klion</dc:creator><author>Klion</author><pubDate>Wed, 25 Aug 2010 09:12:00 GMT</pubDate><guid>http://www.cppblog.com/klion/archive/2010/08/25/124698.html</guid><wfw:comment>http://www.cppblog.com/klion/comments/124698.html</wfw:comment><comments>http://www.cppblog.com/klion/archive/2010/08/25/124698.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/klion/comments/commentRss/124698.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klion/services/trackbacks/124698.html</trackback:ping><description><![CDATA[<div class=Section0 style="LAYOUT-GRID:  15.6pt none">
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 84pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;下面我们以一种游戏的方式来引进三种基本的博弈问题。</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: rgb(255,0,0); FONT-FAMILY: 'Verdana'; mso-spacerun: 'yes'">一．</span><span style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: rgb(255,0,0); FONT-FAMILY: 'Verdana'; mso-spacerun: 'yes'">巴什博奕（<font face=Verdana>Bash&nbsp;Game</font><font face=宋体>）：</font></span><span style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: rgb(255,0,0); FONT-FAMILY: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-INDENT: 24pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">首先我们来玩一个比较古老的报数游戏。<font face=Verdana>A</font><font face=宋体>和</font><font face=Verdana>B</font><font face=宋体>一起报数，每个人每次最少报一个</font><font face=Verdana>,</font><font face=宋体>最多报</font><font face=Verdana>4</font><font face=宋体>个。轮流报数</font><font face=Verdana>,</font><font face=宋体>看谁先报到</font><font face=Verdana>30.</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-INDENT: 24pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">如果不知道巴什博弈的可能会觉得这个是个有运气成分的问题，但是如果知道的人一定知道怎样一定可以赢。</span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-INDENT: 24pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">比如<font face=Verdana>A</font><font face=宋体>先报数的话</font><font face=Verdana>,</font><font face=宋体>那么</font><font face=Verdana>B</font><font face=宋体>一定可以赢</font><font face=Verdana>(</font><font face=宋体>这里假定</font><font face=Verdana>B</font><font face=宋体>知道怎么正确的报数</font><font face=Verdana>)</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">B<font face=宋体>可以这样报数</font><font face=Verdana>,</font><font face=宋体>每次报</font><font face=Verdana>5-k(A)</font><font face=宋体>个数</font><font face=Verdana>,</font><font face=宋体>其中</font><font face=Verdana>k(A)</font><font face=宋体>是</font><font face=Verdana>A</font><font face=宋体>报数的个数这样的话没一次</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">两人报完数之后会变成<font face=Verdana>5&nbsp;10&nbsp;15&nbsp;20&nbsp;25&nbsp;30</font><font face=宋体>这样是不是</font><font face=Verdana>B</font><font face=宋体>一定会赢呢</font><font face=Verdana>?</font><font face=宋体>是不是有一种被欺骗的感觉呢</font><font face=Verdana>?</font><font face=宋体>好吧下面我们来看看这个原理。我们先看下一个一眼就能看出答案的例子&nbsp;比如说我们报到</font><font face=Verdana>5(4+1),</font><font face=宋体>每次报最多报</font><font face=Verdana>4</font><font face=宋体>个</font><font face=Verdana>,</font><font face=宋体>最少报</font><font face=Verdana>1</font><font face=宋体>个</font><font face=Verdana>.</font><font face=宋体>那么是不是后者一定可以赢呢？答案是肯定的。好了到这巴什博弈的精髓基本就</font><font face=Verdana>OK</font><font face=宋体>了。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">那么如果我们要报到<font face=Verdana>n+1,</font><font face=宋体>每次最多报</font><font face=Verdana>n</font><font face=宋体>个</font><font face=Verdana>,</font><font face=宋体>最少报</font><font face=Verdana>1</font><font face=宋体>个的话</font><font face=Verdana>,</font><font face=宋体>后者一定能够赢。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">现在我们需要报数到<font face=Verdana>n,</font><font face=宋体>而每次最多报数</font><font face=Verdana>m</font><font face=宋体>个</font><font face=Verdana>,</font><font face=宋体>最少报数</font><font face=Verdana>1</font><font face=宋体>个</font><font face=Verdana>.</font><font face=宋体>我们可以化成这样</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">n&nbsp;=&nbsp;k*(1+m)+r(0&nbsp;&lt;=&nbsp;r&nbsp;&lt;=&nbsp;m<font face=宋体>）这样的话如果</font><font face=Verdana>r</font><font face=宋体>不等于</font><font face=Verdana>0</font><font face=宋体>那么先手一定会赢，为什么呢？首先先手报</font><font face=Verdana>r</font><font face=宋体>个</font><font face=Verdana>,</font><font face=宋体>那么剩下</font><font face=Verdana>k</font><font face=宋体>倍</font><font face=Verdana>(1+m)</font><font face=宋体>个数</font><font face=Verdana>,</font><font face=宋体>那么我们每次报数</font><font face=Verdana>1+m-k(B)</font><font face=宋体>个数就一定能保证最后剩下</font><font face=Verdana>1+m</font><font face=宋体>个</font><font face=Verdana>,</font><font face=宋体>那么就到了上面我们说的那个了</font><font face=Verdana>,</font><font face=宋体>先手就一定会赢</font><font face=Verdana>,</font><font face=宋体>如果</font><font face=Verdana>r=0</font><font face=宋体>那么后手一定会赢</font><font face=Verdana>,</font><font face=宋体>道理一样的。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">到这巴什博弈也就介绍完了<font face=Verdana>,</font><font face=宋体>知道这个道理之后我们也可以去骗小朋友了。</font><font face=Verdana>-_-//</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: rgb(255,0,0); FONT-FAMILY: 'Verdana'; mso-spacerun: 'yes'">二．</span><span style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: rgb(255,0,0); FONT-FAMILY: 'Verdana'; mso-spacerun: 'yes'">威佐夫博奕（<font face=Verdana>Wythoff&nbsp;Game</font><font face=宋体>）：</font></span><span style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: rgb(255,0,0); FONT-FAMILY: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;这种博弈比前面一种要稍微复杂一点。我们来看下下面这个游戏。</span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;有两堆火柴棍<font face=Verdana>,</font><font face=宋体>每次可以从某一堆取至少</font><font face=Verdana>1</font><font face=宋体>根火柴棍</font><font face=Verdana>(</font><font face=宋体>无上限</font><font face=Verdana>)</font><font face=宋体>，或者从两堆取相同的火柴棍数。最后取完的是胜利者。好了</font><font face=Verdana>,</font><font face=宋体>如果你不知道这个博弈定理</font><font face=Verdana>,</font><font face=宋体>对于小数目的火柴棍数</font><font face=Verdana>,</font><font face=宋体>可能还能推出来</font><font face=Verdana>,</font><font face=宋体>但是如果火柴棍数一多</font><font face=Verdana>,</font><font face=宋体>就不行了。看了下面的这个介绍</font><font face=Verdana>,</font><font face=宋体>你也会有一种被骗的感觉。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;首先我们知道两堆火柴是没有差别的<font face=Verdana>,</font><font face=宋体>也就是说第一堆有</font><font face=Verdana>a</font><font face=宋体>根</font><font face=Verdana>,</font><font face=宋体>第二堆有</font><font face=Verdana>b</font><font face=宋体>根和第一堆有</font><font face=Verdana>b</font><font face=宋体>根</font><font face=Verdana>,</font><font face=宋体>第二堆有</font><font face=Verdana>a</font><font face=宋体>根是一样的结果。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;我们用一个二维的状态（<font face=Verdana>a,b)</font><font face=宋体>来记录当前剩下的火柴数，表示第一堆剩下</font><font face=Verdana>a</font><font face=宋体>根火柴</font><font face=Verdana>,</font><font face=宋体>第二堆剩下</font><font face=Verdana>b</font><font face=宋体>根火柴。同样我们假设两个人的编号是</font><font face=Verdana>A</font><font face=宋体>和</font><font face=Verdana>B</font><font face=宋体>，且</font><font face=Verdana>A</font><font face=宋体>先取。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">那么如果某个人遇到了这样的状态<font face=Verdana>(0,0)</font><font face=宋体>那么也就是说这个人输了。这样的状态我们叫做奇异状态</font><font face=Verdana>,</font><font face=宋体>也可以叫做失败态。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">那么接下来的几个失败态为<font face=Verdana>(1,2),(3,5),(4,7),(6,10),(8,13)</font><font face=宋体>&#8230;&#8230;</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">我们用<font face=Verdana>a[i]</font><font face=宋体>表示失败态中的第一个</font><font face=Verdana>,b[i]</font><font face=宋体>表示失败态中的第二个</font><font face=Verdana>.(i</font><font face=宋体>从</font><font face=Verdana>0</font><font face=宋体>开始</font><font face=Verdana>).</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">那么我们可以看到<font face=Verdana>b[i]&nbsp;=&nbsp;a[i]+i;</font><font face=宋体>（</font><font face=Verdana>i&nbsp;&gt;=&nbsp;0</font><font face=宋体>）</font><font face=Verdana>,a[i]</font><font face=宋体>是前面的失败态中没有出现过的最小的整数</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">下面我们可以得到三个基本的结论。</span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;1.<font face=宋体>每个数仅包含在一个失败态中</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;首先我们知道<font face=Verdana>a[k]</font><font face=宋体>是不可能和前面的失败态中的</font><font face=Verdana>a[i],b[i]</font><font face=宋体>重复的</font><font face=Verdana>(</font><font face=宋体>这点由</font><font face=Verdana>a[i]</font><font face=宋体>的得到可以知道</font><font face=Verdana>)</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">b[k]&nbsp;=&nbsp;a[k]+k&nbsp;&gt;&nbsp;a[k-1]+k&gt;a[k-1]+k-1+1&gt;a[k-1]+(k-1)&nbsp;=&nbsp;b[k-1]&gt;a[k-1]<font face=宋体>这样我们知道每个数仅在一个失败态中。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;2.<font face=宋体>每个失败态可以转到非失败态。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;加入当前的失败态为<font face=Verdana>(a,b)</font><font face=宋体>，那么如果我们只在一堆中取的话</font><font face=Verdana>,</font><font face=宋体>肯定会变成非失败态</font><font face=Verdana>(</font><font face=宋体>这点由第一点可以保证</font><font face=Verdana>),</font><font face=宋体>如果从两堆同时取的话</font><font face=Verdana>,</font><font face=宋体>由于每个失败态的差是不一样的</font><font face=Verdana>,</font><font face=宋体>所以也不可能得到一个失败态。也就是说一个失败态不管你怎么取</font><font face=Verdana>,</font><font face=宋体>都会得到一个非失败态。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;3.<font face=宋体>每个非失败态都可以转到一个失败态</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">对于这个结论<font face=Verdana>,</font><font face=宋体>首先我们要知到每个状态</font><font face=Verdana>(a,b)</font><font face=宋体>要么</font><font face=Verdana>a&nbsp;=&nbsp;a[i],</font><font face=宋体>要么</font><font face=Verdana>b&nbsp;=&nbsp;b[i].(</font><font face=宋体>每个数都出现在一个失败态中</font><font face=Verdana>),</font><font face=宋体>下面我们分两种情况来讨论</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;I.a&nbsp;=&nbsp;a[i].<font face=宋体>如果</font><font face=Verdana>b&nbsp;=&nbsp;a</font><font face=宋体>的话那么一次取完就变成了</font><font face=Verdana>(0,0).</font><font face=宋体>如果</font><font face=Verdana>b&nbsp;&gt;&nbsp;b[i]</font><font face=宋体>的话</font><font face=Verdana>,</font><font face=宋体>那么我们从第二堆中取走</font><font face=Verdana>b-b[i]</font><font face=宋体>就变成了一个失败态。如果</font><font face=Verdana>b&nbsp;&lt;&nbsp;b[i].</font><font face=宋体>那么我们从两堆中同时取走</font><font face=Verdana>a-a[b-a[i]]</font><font face=宋体>这样得到失败态</font><font face=Verdana>(a[b-a[i]],a[b-a[i]]+b-a[i])(a[i]&nbsp;=&nbsp;a)</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;II.b&nbsp;=&nbsp;b[i].<font face=宋体>如果</font><font face=Verdana>a&nbsp;&gt;&nbsp;a[i]</font><font face=宋体>那么我们从第一堆中取走</font><font face=Verdana>a-a[i]</font><font face=宋体>根火柴</font><font face=Verdana>.</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果<font face=Verdana>a&nbsp;&lt;&nbsp;a[i].</font><font face=宋体>这里又分两种情况。第一是</font><font face=Verdana>a&nbsp;=&nbsp;a[k](k&nbsp;&lt;&nbsp;i)</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">那么我们从第二堆取走<font face=Verdana>b&nbsp;-&nbsp;b[k]</font><font face=宋体>就行了。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">第二是<font face=Verdana>a&nbsp;=&nbsp;b[k]</font><font face=宋体>这样的话由于两堆火柴是没有区别的</font><font face=Verdana>,</font><font face=宋体>所以我们把</font><font face=Verdana>b</font><font face=宋体>变成</font><font face=Verdana>a[k]</font><font face=宋体>就行了</font><font face=Verdana>,</font><font face=宋体>也即是从第二堆火柴中取走</font><font face=Verdana>b&nbsp;-&nbsp;a[k]</font><font face=宋体>就变成了失败态</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">至于怎么判断一个状态是否是失败态<font face=Verdana>.</font><font face=宋体>我们可以用下面的方法来判断</font><font face=Verdana>(</font><font face=宋体>本人暂时还不会证明</font><font face=Verdana>)</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;a[i]&nbsp;=&nbsp;[i*(1+<font face=宋体>&#8730;</font><font face=Verdana>5)/2](</font><font face=宋体>这里的中括号表示向下取整</font><font face=Verdana>)&nbsp;&nbsp;&nbsp;b[i]&nbsp;=&nbsp;a[i]+i;</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;那么这就是一个失败态<font face=Verdana>,</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;看了这之后可以去找<font face=Verdana>POJ1067</font><font face=宋体>练练手</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: rgb(255,0,0); FONT-FAMILY: 'Verdana'; mso-spacerun: 'yes'">三．</span><span style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: rgb(255,0,0); FONT-FAMILY: 'Verdana'; mso-spacerun: 'yes'">尼姆博奕（<font face=Verdana>Nimm&nbsp;Game</font><font face=宋体>）：</font></span><span style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: rgb(255,0,0); FONT-FAMILY: 'Verdana'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; COLOR: rgb(255,0,0); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;</span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;这个已经变成了三堆火柴了。每次只能从某一堆取任意个<font face=Verdana>(</font><font face=宋体>至少为</font><font face=Verdana>1)</font><font face=宋体>，最后取完的为胜利者。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;这个博弈我们用三维的状态来表示<font face=Verdana>(a,b,c).</font><font face=宋体>对于每个失败态我们有</font><font face=Verdana>a^b^c&nbsp;=&nbsp;0</font><font face=宋体>至于为什么我暂时不会证</font><font face=Verdana>(</font><font face=宋体>记得陈景润的一本组合数学中有证明</font><font face=Verdana>,</font><font face=宋体>后面要是懂了再来补吧</font><font face=Verdana>)</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;对于一个非失败态我们可以通过转换得到一个失败态<font face=Verdana>,</font><font face=宋体>也就是说</font><font face=Verdana>(a,b,c)</font><font face=宋体>我们可以通过如下的操作得到一个失败态</font><font face=Verdana>,</font><font face=宋体>如果</font><font face=Verdana>a^b&nbsp;&lt;&nbsp;c</font><font face=宋体>那么我们从第三堆中取走</font><font face=Verdana>c-a^b</font><font face=宋体>根</font><font face=Verdana>,</font><font face=宋体>如果</font><font face=Verdana>a^c&nbsp;&lt;&nbsp;b</font><font face=宋体>那么我们从第二堆中取走</font><font face=Verdana>b&nbsp;-&nbsp;a^c</font><font face=宋体>根</font><font face=Verdana>.</font><font face=宋体>如果</font><font face=Verdana>b^c&nbsp;&lt;&nbsp;a</font><font face=宋体>那么我们从第一堆中取走</font><font face=Verdana>a&nbsp;-&nbsp;b^c</font><font face=宋体>根。这样就变成了一个失败态。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">由于水平有限<font face=Verdana>,</font><font face=宋体>暂时只能写这么多了。</font></span><span style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: rgb(255,0,0); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
</div>
<!--endfragment-->
<img src ="http://www.cppblog.com/klion/aggbug/124698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klion/" target="_blank">Klion</a> 2010-08-25 17:12 <a href="http://www.cppblog.com/klion/archive/2010/08/25/124698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sgu 249</title><link>http://www.cppblog.com/klion/archive/2010/05/18/115704.html</link><dc:creator>Klion</dc:creator><author>Klion</author><pubDate>Tue, 18 May 2010 09:45:00 GMT</pubDate><guid>http://www.cppblog.com/klion/archive/2010/05/18/115704.html</guid><wfw:comment>http://www.cppblog.com/klion/comments/115704.html</wfw:comment><comments>http://www.cppblog.com/klion/archive/2010/05/18/115704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/klion/comments/commentRss/115704.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klion/services/trackbacks/115704.html</trackback:ping><description><![CDATA[最近在看<a href="http://www.matrix67.com/blog/archives/263">Matrix67大牛</a>的位运算4则(还只看到第3则)，看到这，大牛推荐的。<br>然后就做了下，不过建议先自己理解，别看大牛给的程序，<br>
<meta http-equiv="Content-Type" content="text/html; charset=" utf-8="">
<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 11">
<meta name="Originator" content="Microsoft Word 11">
<link rel="File-List" href="file:///C:%5CWINDOWS%5CTEMP%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml>
<w:worddocument>
<w:view>Normal</w:view>
<w:zoom>0</w:zoom>
<w:punctuationkerning/>
<w:drawinggridverticalspacing>7.8 磅</w:drawinggridverticalspacing>
<w:displayhorizontaldrawinggridevery>0</w:displayhorizontaldrawinggridevery>
<w:displayverticaldrawinggridevery>2</w:displayverticaldrawinggridevery>
<w:validateagainstschemas/>
<w:saveifxmlinvalid>false</w:saveifxmlinvalid>
<w:ignoremixedcontent>false</w:ignoremixedcontent>
<w:alwaysshowplaceholdertext>false</w:alwaysshowplaceholdertext>
<w:compatibility>
<w:spaceforul/>
<w:balancesinglebytedoublebytewidth/>
<w:donotleavebackslashalone/>
<w:ultrailspace/>
<w:donotexpandshiftreturn/>
<w:adjustlineheightintable/>
<w:breakwrappedtables/>
<w:snaptogridincell/>
<w:wraptextwithpunct/>
<w:useasianbreakrules/>
<w:dontgrowautofit/>
<w:usefelayout/>
</w:compatibility>
<w:browserlevel>MicrosoftInternetExplorer4</w:browserlevel>
</w:worddocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:latentstyles deflockedstate="false" latentstylecount="156">
</w:latentstyles>
</xml><![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
pre
{margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:宋体;
mso-bidi-font-family:宋体;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
table.MsoTableGrid
{mso-style-name:网格型;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
<pre><span style="color: black;"><span>&nbsp;</span>这个题是二维的格雷码，把两个合并起来。<span lang="EN-US"><o:p></o:p></span></span></pre>
<pre><span style="color: black;">题意是</span>把<span lang="EN-US">0</span>到<span lang="EN-US">2^(n +m)-1</span>的数写成<span lang="EN-US">2^n * 2^m</span>的矩阵，使得位置相邻两数的二进制表示只有一位之差</pre>
<pre>这样的话就是把<span lang="EN-US">n</span>位的格雷码和<span lang="EN-US">m</span>位的格雷码合并起来就行了</pre>
<pre>拿<span lang="EN-US">n = 1 m = 2</span>来说吧</pre>
<pre>可以自己先穷举一下会发现时下面的样子</pre>
<pre><span lang="EN-US"><o:p>&nbsp;</o:p></span></pre>
<table class="MsoTableGrid" style="border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td style="width: 106.5pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: black;">一<span lang="EN-US"><o:p></o:p></span></span></pre>
            </td>
            <td style="width: 106.5pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: black;">二<span lang="EN-US"><o:p></o:p></span></span></pre>
            </td>
            <td style="width: 106.55pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: black;">三<span lang="EN-US"><o:p></o:p></span></span></pre>
            </td>
            <td style="width: 106.55pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: black;">四<span lang="EN-US"><o:p></o:p></span></span></pre>
            </td>
        </tr>
        <tr>
            <td style="width: 106.5pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: lime;" lang="EN-US">00</span><span style="color: black;" lang="EN-US">0(0)<o:p></o:p></span></pre>
            </td>
            <td style="width: 106.5pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: lime;" lang="EN-US">10</span><span style="color: black;" lang="EN-US">0(4)<o:p></o:p></span></pre>
            </td>
            <td style="width: 106.55pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: lime;" lang="EN-US">11</span><span style="color: black;" lang="EN-US">0(6)<o:p></o:p></span></pre>
            </td>
            <td style="width: 106.55pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: lime;" lang="EN-US">01</span><span style="color: black;" lang="EN-US">0(2)<o:p></o:p></span></pre>
            </td>
        </tr>
        <tr>
            <td style="width: 106.5pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: lime;" lang="EN-US">00</span><span style="color: black;" lang="EN-US">1(1)<o:p></o:p></span></pre>
            </td>
            <td style="width: 106.5pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: lime;" lang="EN-US">10</span><span style="color: black;" lang="EN-US">1(5)<o:p></o:p></span></pre>
            </td>
            <td style="width: 106.55pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: lime;" lang="EN-US">11</span><span style="color: black;" lang="EN-US">1(7)<o:p></o:p></span></pre>
            </td>
            <td style="width: 106.55pt; padding: 0cm 5.4pt;" width="142" valign="top">
            <pre><span style="color: lime;" lang="EN-US">01</span><span style="color: black;" lang="EN-US">1(3)<o:p></o:p></span></pre>
            </td>
        </tr>
    </tbody>
</table>
<pre><span style="color: black;">可以发现各列的前两位是一样的，也是<span lang="EN-US">m</span>位的<span lang="EN-US">gray(</span>其实先把所有列合并起来，然后再在后面加上<span lang="EN-US">n</span>的<span lang="EN-US">gray</span>就成了这个了<span lang="EN-US">)<o:p></o:p></span></span></pre>
<pre><span style="color: black;">这样的话，实现起来就比较容易了<span lang="EN-US"><o:p></o:p></span></span></pre>
<pre><span style="color: black;">代码如下(第n个gray码是n ^ (n &gt;&gt; 1)(其中n从0开始))<br><br><br><br>
<br><br></span></pre>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">for</span><span style="color: #000000;">(x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;x&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">n;x</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="color: #008000;">//</span><span style="color: #008000;">列的gray&nbsp;&nbsp;就可以把一行搞成几行</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(x&nbsp;</span><span style="color: #000000;">^</span><span style="color: #000000;">&nbsp;(x&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">));</span><span style="color: #008000;">//</span><span style="color: #008000;">计算n位的gray</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(y&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;y&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">m;y</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="color: #008000;">//</span><span style="color: #008000;">计算m位的gray</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&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;(y&nbsp;</span><span style="color: #000000;">^</span><span style="color: #000000;">&nbsp;(y&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">))&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;n;</span><span style="color: #008000;">//</span><span style="color: #008000;">移位，这里就是左移一位</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,(u&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;t));</span><span style="color: #008000;">//</span><span style="color: #008000;">输出,由于这里的不会出现进位，所以可以用加</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br></span></div>
<br><br>    <img src ="http://www.cppblog.com/klion/aggbug/115704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klion/" target="_blank">Klion</a> 2010-05-18 17:45 <a href="http://www.cppblog.com/klion/archive/2010/05/18/115704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>