﻿<?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++博客-y @ The Angry Teletubbies-文章分类-CodeForces</title><link>http://www.cppblog.com/y346491470/category/18524.html</link><description>为梦想而奋斗！</description><language>zh-cn</language><lastBuildDate>Thu, 19 Apr 2012 14:58:46 GMT</lastBuildDate><pubDate>Thu, 19 Apr 2012 14:58:46 GMT</pubDate><ttl>60</ttl><item><title>CF 161D - 树dp</title><link>http://www.cppblog.com/y346491470/articles/171726.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Tue, 17 Apr 2012 03:04:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/171726.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/171726.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/171726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/171726.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/171726.html</trackback:ping><description><![CDATA[【题意】：给出一棵树，每条边的长度为1，问树上有多少点对的距离恰好为k。<br /><br />【题解】：用树的分治可解，但是写起来比较麻烦。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;设状态dp[i][j]表示以i为根的子树的节点到i的距离恰为j的个数。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;然后利用乘法原理求出答案，再把儿子的信息传给父亲。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;50050<br /><span style="color: #008080; ">19</span>&nbsp;<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;k;<br /><span style="color: #008080; ">21</span>&nbsp;ll&nbsp;dp[50050][505];<br /><span style="color: #008080; ">22</span>&nbsp;ll&nbsp;ans;<br /><span style="color: #008080; ">23</span>&nbsp;vector&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;vec[maxn];<br /><span style="color: #008080; ">24</span>&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fa)&nbsp;{<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dp[u],&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dp[u]));<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[u][0]&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;size&nbsp;=&nbsp;vec[u].size();<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;size;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v&nbsp;=&nbsp;vec[u][i];<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(v&nbsp;==&nbsp;fa)&nbsp;<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(v,&nbsp;u);<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;k;&nbsp;j++)&nbsp;<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;+=&nbsp;dp[u][j-1]&nbsp;*&nbsp;dp[v][k-j];<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;k;&nbsp;j++)<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[u][j]&nbsp;+=&nbsp;dp[v][j-1];<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">38</span>&nbsp;}<br /><span style="color: #008080; ">39</span>&nbsp;<br /><span style="color: #008080; ">40</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;v;<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cin&nbsp;&gt;&gt;&nbsp;n&nbsp;&gt;&gt;&nbsp;k)&nbsp;{<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;maxn;&nbsp;i++)&nbsp;vec[i].clear();<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;&gt;&gt;&nbsp;u&nbsp;&gt;&gt;&nbsp;v;<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[u].pb(v);<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[v].pb(u);<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(1,&nbsp;-1);<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;ans&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">54</span>&nbsp;}<br /><span style="color: #008080; ">55</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/171726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-04-17 11:04 <a href="http://www.cppblog.com/y346491470/articles/171726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CF 152E - 状态压缩dp + 斯坦纳树 + 记录方案</title><link>http://www.cppblog.com/y346491470/articles/171718.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Tue, 17 Apr 2012 02:50:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/171718.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/171718.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/171718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/171718.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/171718.html</trackback:ping><description><![CDATA[【题意】：最基础的斯坦纳树。<br /><br />【题解】：只需要用spfa dp一次即可，要记录状态的前驱状态保存方案。<br /><br />【代码】：<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inf&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;29;<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dp[210][1&lt;&lt;7],&nbsp;pre[210][1&lt;&lt;7];<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;m,&nbsp;k,&nbsp;nn,&nbsp;mm;<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;hash[210];<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maz[110][110];<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;g[110][110];<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;visit[210][1&lt;&lt;7];<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dx[]&nbsp;=&nbsp;{0,&nbsp;0,&nbsp;-1,&nbsp;1};<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dy[]&nbsp;=&nbsp;{-1,&nbsp;1,&nbsp;0,&nbsp;0};<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Node&nbsp;{<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;st;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node(){}<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node(<span style="color: #0000FF; ">int</span>&nbsp;_u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_st)&nbsp;{<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;_u,&nbsp;st&nbsp;=&nbsp;_st;<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;};<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;queue&lt;Node&gt;&nbsp;que;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;check(<span style="color: #0000FF; ">int</span>&nbsp;x,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;y)&nbsp;{<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(x&nbsp;&gt;=&nbsp;0&nbsp;&amp;&amp;&nbsp;x&nbsp;&lt;&nbsp;n&nbsp;&amp;&amp;&nbsp;y&nbsp;&gt;=&nbsp;0&nbsp;&amp;&amp;&nbsp;y&nbsp;&lt;&nbsp;m)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;update(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;st,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;w,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fa)&nbsp;{<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dp[u][st]&nbsp;&gt;&nbsp;w)&nbsp;{<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[u][st]&nbsp;=&nbsp;w;<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre[u][st]&nbsp;=&nbsp;fa;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!visit[u][st])&nbsp;{<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.push(Node(u,&nbsp;st));<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[u][st]&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;u,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;st)&nbsp;{<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x&nbsp;=&nbsp;u&nbsp;/&nbsp;m,&nbsp;y&nbsp;=&nbsp;u&nbsp;%&nbsp;m;<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g[x][y]&nbsp;=&nbsp;'X';<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pre[u][st]&nbsp;==&nbsp;-1)&nbsp;<span style="color: #0000FF; ">return</span>;<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v&nbsp;=&nbsp;pre[u][st]&nbsp;/&nbsp;1000,&nbsp;stt&nbsp;=&nbsp;pre[u][st]&nbsp;%&nbsp;1000;<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(v,&nbsp;stt);<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(stt&nbsp;-&nbsp;st)&nbsp;dfs(v,&nbsp;st&nbsp;-&nbsp;stt);<span style="color: #008000; ">//</span><span style="color: #008000; ">牛叉的记录，拆分当前状态</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;64</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;solve()&nbsp;{<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(!que.empty())&nbsp;{<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;now&nbsp;=&nbsp;que.front();<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que.pop();<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;now.u,&nbsp;x&nbsp;=&nbsp;now.u&nbsp;/&nbsp;m,&nbsp;y&nbsp;=&nbsp;now.u&nbsp;%&nbsp;m,&nbsp;st&nbsp;=&nbsp;now.st;<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[u][st]&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;4;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;xx&nbsp;=&nbsp;x&nbsp;+&nbsp;dx[i],&nbsp;yy&nbsp;=&nbsp;y&nbsp;+&nbsp;dy[i];<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!check(xx,&nbsp;yy))&nbsp;<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v&nbsp;=&nbsp;xx&nbsp;*&nbsp;m&nbsp;+&nbsp;yy;<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(v,&nbsp;st,&nbsp;dp[u][st]&nbsp;+&nbsp;maz[xx][yy],&nbsp;u&nbsp;*&nbsp;1000&nbsp;+&nbsp;st);<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t&nbsp;=&nbsp;mm&nbsp;-&nbsp;1&nbsp;-&nbsp;st;<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;t;&nbsp;i;&nbsp;i&nbsp;=&nbsp;(i-1)&nbsp;&amp;&nbsp;t)&nbsp;{<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(u,&nbsp;i&nbsp;|&nbsp;st,&nbsp;dp[u][i]&nbsp;+&nbsp;dp[u][st]&nbsp;-&nbsp;maz[x][y],&nbsp;u&nbsp;*&nbsp;1000&nbsp;+&nbsp;st);<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans&nbsp;=&nbsp;inf,&nbsp;u;<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;nn;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(ans&nbsp;&gt;&nbsp;dp[i][mm-1])&nbsp;{<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;dp[i][mm-1];<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(u,&nbsp;mm&nbsp;-&nbsp;1);<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;ans&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;m;&nbsp;j++)<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;g[i][j];<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;<br /><span style="color: #008080; ">100</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cin&nbsp;&gt;&gt;&nbsp;n&nbsp;&gt;&gt;&nbsp;m&nbsp;&gt;&gt;&nbsp;k)&nbsp;{<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(!que.empty())&nbsp;que.pop();<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;m;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;&gt;&gt;&nbsp;maz[i][j];<br /><span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g[i][j]&nbsp;=&nbsp;'.';<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nn&nbsp;=&nbsp;n&nbsp;*&nbsp;m,&nbsp;mm&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;k;<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(hash,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(hash));<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;<span style="color: #0000FF; ">false</span>,&nbsp;<span style="color: #0000FF; ">sizeof</span>(visit));<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;nn;&nbsp;i++)&nbsp;<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;mm;&nbsp;j++)<br /><span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][j]&nbsp;=&nbsp;inf;<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0,&nbsp;a,&nbsp;b;&nbsp;i&nbsp;&lt;&nbsp;k;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;&gt;&gt;&nbsp;a&nbsp;&gt;&gt;&nbsp;b;<br /><span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a--,&nbsp;b--;<br /><span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;u&nbsp;=&nbsp;a&nbsp;*&nbsp;m&nbsp;+&nbsp;b;<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hash[u]&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;i;<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(u,&nbsp;hash[u],&nbsp;maz[a][b],&nbsp;-1);<br /><span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();<br /><span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">125</span>&nbsp;}<br /><span style="color: #008080; ">126</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/171718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-04-17 10:50 <a href="http://www.cppblog.com/y346491470/articles/171718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CF 150A - 博弈 + 记忆化搜索</title><link>http://www.cppblog.com/y346491470/articles/165943.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Sat, 18 Feb 2012 16:32:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/165943.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/165943.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/165943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/165943.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/165943.html</trackback:ping><description><![CDATA[【题意】：给出一个当前值q(q &lt;= 10^13)，两个人轮流写出一个当前值的非平凡因子来取代当前值，谁不能写谁胜出。一个数的非平凡因子是指除1和本身之外的因子。两个人都采取最优决策，问最后谁胜出。<br /><br />【题解】：博弈，直接记忆化搜索即可，只要搜到第一个必败态就可以跳出。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;利用map来处理可以把代码写得很短。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;MAX&nbsp;10000000<br /><span style="color: #008080; ">19</span>&nbsp;map&lt;ll,&nbsp;<span style="color: #0000FF; ">bool</span>&gt;&nbsp;win;<br /><span style="color: #008080; ">20</span>&nbsp;map&lt;ll,&nbsp;ll&gt;&nbsp;ans;<br /><span style="color: #008080; ">21</span>&nbsp;ll&nbsp;q;<br /><span style="color: #008080; ">22</span>&nbsp;<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;dfs(ll&nbsp;x)&nbsp;{<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(win.find(x)&nbsp;==&nbsp;win.end())&nbsp;{<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;isprime&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>,&nbsp;WIN&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans[x]&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(ll&nbsp;i&nbsp;=&nbsp;2;&nbsp;i&nbsp;*&nbsp;i&nbsp;&lt;=&nbsp;x&nbsp;&amp;&amp;&nbsp;!WIN;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(x&nbsp;%&nbsp;i&nbsp;==&nbsp;0)&nbsp;{<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isprime&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!dfs(i))&nbsp;WIN&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>,&nbsp;ans[x]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(WIN)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!dfs(x&nbsp;/&nbsp;i))&nbsp;WIN&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>,&nbsp;ans[x]&nbsp;=&nbsp;x&nbsp;/&nbsp;i;<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win[x]&nbsp;=&nbsp;WIN&nbsp;||&nbsp;isprime;<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;win[x];<br /><span style="color: #008080; ">38</span>&nbsp;}<br /><span style="color: #008080; ">39</span>&nbsp;<br /><span style="color: #008080; ">40</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans.clear(),&nbsp;win.clear();<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cin&nbsp;&gt;&gt;&nbsp;q)&nbsp;{<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dfs(q))&nbsp;cout&nbsp;&lt;&lt;&nbsp;1&nbsp;&lt;&lt;&nbsp;endl&nbsp;&lt;&lt;&nbsp;ans[q]&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;cout&nbsp;&lt;&lt;&nbsp;2&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">47</span>&nbsp;}<br /><span style="color: #008080; ">48</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/165943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-02-19 00:32 <a href="http://www.cppblog.com/y346491470/articles/165943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CF 149D - 区间dp</title><link>http://www.cppblog.com/y346491470/articles/165484.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 13 Feb 2012 06:55:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/165484.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/165484.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/165484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/165484.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/165484.html</trackback:ping><description><![CDATA[【题意】：给出一个长度为n的括号序列，括号满足两两匹配。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;给出三个条件：<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.每个括号可以不染色，染蓝色或者染红色；<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.匹配的括号对有且仅有一个染色；<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3.相邻的括号不能染相同的颜色。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;问，满足以上三个条件的染色方案有多少种。<br /><br />【题解】：好明显的dp题，因为一般这种求方案数的题目如果用纯数学知识来解是解不出的，而且限制条件一大堆。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;设状态dp[l][r][c1][c2]表示[l,r]之间且l染成c1,r染成c2的合法方案数。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;然后转移要分两种情况讨论：1.l与r匹配；2.l与r不匹配<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;转移就是运用乘法原理，要先预处理括号的匹配情况。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;#include&nbsp;"stack"<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;MAX&nbsp;710<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MOD&nbsp;=&nbsp;1000000007;<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;str;<br /><span style="color: #008080; ">22</span>&nbsp;ll&nbsp;dp[MAX][MAX][3][3];<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;mat[MAX];<br /><span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;s[MAX],&nbsp;top;<br /><span style="color: #008080; ">25</span>&nbsp;<br /><span style="color: #008080; ">26</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;pretreatment()&nbsp;{<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;str.length();&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(str[i]&nbsp;==&nbsp;'(')&nbsp;s[top++]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;mat[s[--top]]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">32</span>&nbsp;}<br /><span style="color: #008080; ">33</span>&nbsp;<br /><span style="color: #008080; ">34</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;check(<span style="color: #0000FF; ">int</span>&nbsp;a,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;b)&nbsp;{<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(a&nbsp;==&nbsp;0&nbsp;||&nbsp;b&nbsp;==&nbsp;0&nbsp;||&nbsp;a&nbsp;!=&nbsp;b)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">37</span>&nbsp;}<br /><span style="color: #008080; ">38</span>&nbsp;<br /><span style="color: #008080; ">39</span>&nbsp;ll&nbsp;func(<span style="color: #0000FF; ">int</span>&nbsp;l,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;r,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;c1,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;c2)&nbsp;{<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(dp[l][r][c1][c2]&nbsp;!=&nbsp;-1)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;dp[l][r][c1][c2];<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;res&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(mat[l]&nbsp;==&nbsp;r)&nbsp;{<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>((c1&nbsp;==&nbsp;0)&nbsp;^&nbsp;(c2&nbsp;==&nbsp;0))&nbsp;{<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(l&nbsp;+&nbsp;1&nbsp;==&nbsp;r)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;dp[l][r][c1][c2]&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;3;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;3;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(check(c1,&nbsp;i)&nbsp;&amp;&amp;&nbsp;check(j,&nbsp;c2))&nbsp;{<br /><span style="color: #008080; ">48</span>&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;res&nbsp;+=&nbsp;func(l&nbsp;+&nbsp;1,&nbsp;r&nbsp;-&nbsp;1,&nbsp;i,&nbsp;j);<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;dp[l][r][c1][c2]&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;3;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;3;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(check(i,&nbsp;j))&nbsp;<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;+=&nbsp;func(l,&nbsp;mat[l],&nbsp;c1,&nbsp;i)&nbsp;*&nbsp;func(mat[l]&nbsp;+&nbsp;1,&nbsp;r,&nbsp;j,&nbsp;c2);<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;dp[l][r][c1][c2]&nbsp;=&nbsp;res&nbsp;%&nbsp;MOD;<br /><span style="color: #008080; ">62</span>&nbsp;}<br /><span style="color: #008080; ">63</span>&nbsp;<br /><span style="color: #008080; ">64</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cin&nbsp;&gt;&gt;&nbsp;str)&nbsp;{<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pretreatment();<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dp,&nbsp;-1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dp));<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;ans&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;3;&nbsp;i++)<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;3;&nbsp;j++)<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;+=&nbsp;func(0,&nbsp;str.length()&nbsp;-&nbsp;1,&nbsp;i,&nbsp;j);<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;ans&nbsp;%&nbsp;MOD&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">75</span>&nbsp;}<br /><span style="color: #008080; ">76</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/165484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-02-13 14:55 <a href="http://www.cppblog.com/y346491470/articles/165484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CF 148D - 概率dp</title><link>http://www.cppblog.com/y346491470/articles/164919.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Fri, 03 Feb 2012 18:20:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/164919.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/164919.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/164919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/164919.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/164919.html</trackback:ping><description><![CDATA[【题意】：有一个装着w只白鼠和b只黒鼠的袋子，现在公主和龙轮流在袋子里摸出一只老鼠（不放回），谁先摸出白鼠就胜出，公主先手。由于龙摸老鼠的动作较大 ，所以龙每次摸出一只老鼠后，袋子里会随机跑走一只老鼠。如果当前没有了白鼠，一律为龙胜，问公主获胜的机率有多大。<br /><br />【题解】：好明显的概率dp，比赛时居然不够胆开，晕了，水平还是不够。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;今天认真想了一下，发现是很简单的概率dp，亏了。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;设f[i][j] 表示当前袋子有 i 只白鼠和 j 只黑鼠，公主摸完后胜出的机率。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g[i][j] 表示当前袋子有 i 只白鼠和 j 只黒鼠，龙摸完后胜出的机率。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;状态转移:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;f[i][j] = i / (i + j) + j * (1 - g[i][j-1]) / (i + j);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;g[i][j] = i / (i + j) + j / (i + j) * (i / (i + j - 1) * (1 - f[i-1][j-1]) + (j - 1) / (i + j - 1) * (1 - f[i][j-2]));<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;递推一次 O(n*n), 答案即为f[w][b].<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;MAX&nbsp;1005<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;w,&nbsp;b;<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;f[MAX][MAX],&nbsp;g[MAX][MAX];<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cin&nbsp;&gt;&gt;&nbsp;w&nbsp;&gt;&gt;&nbsp;b)&nbsp;{<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;=&nbsp;b;&nbsp;i++)&nbsp;f[0][i]&nbsp;=&nbsp;0.0,&nbsp;g[0][i]&nbsp;=&nbsp;1.0;<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;w;&nbsp;i++)&nbsp;f[i][0]&nbsp;=&nbsp;g[i][0]&nbsp;=&nbsp;1.0;<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;w;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;b;&nbsp;j++)&nbsp;{<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;tmp&nbsp;=&nbsp;0.0;<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][j]&nbsp;=&nbsp;1.0&nbsp;*&nbsp;i&nbsp;/&nbsp;(i&nbsp;+&nbsp;j)&nbsp;+&nbsp;1.0&nbsp;*&nbsp;j&nbsp;*&nbsp;(1&nbsp;-&nbsp;g[i][j-1])&nbsp;/&nbsp;(i&nbsp;+&nbsp;j);<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(j&nbsp;&gt;=&nbsp;2)&nbsp;tmp&nbsp;=&nbsp;1.0&nbsp;*&nbsp;(j&nbsp;-&nbsp;1)&nbsp;/&nbsp;(i&nbsp;+&nbsp;j&nbsp;-&nbsp;1)&nbsp;*&nbsp;(1&nbsp;-&nbsp;f[i][j-2]);<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g[i][j]&nbsp;=&nbsp;1.0&nbsp;*&nbsp;i&nbsp;/&nbsp;(i&nbsp;+&nbsp;j)&nbsp;+&nbsp;1.0&nbsp;*&nbsp;j&nbsp;*&nbsp;(i&nbsp;*&nbsp;(1&nbsp;-&nbsp;f[i-1][j-1])&nbsp;/&nbsp;(i&nbsp;+&nbsp;j&nbsp;-&nbsp;1)&nbsp;+&nbsp;tmp)&nbsp;/&nbsp;(i&nbsp;+&nbsp;j);<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%.10f\n",&nbsp;f[w][b]);<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">36</span>&nbsp;}<br /><span style="color: #008080; ">37</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/164919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-02-04 02:20 <a href="http://www.cppblog.com/y346491470/articles/164919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CF 145C  - 离散dp + 逆元处理组合数</title><link>http://www.cppblog.com/y346491470/articles/164614.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Sat, 28 Jan 2012 14:25:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/164614.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/164614.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/164614.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/164614.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/164614.html</trackback:ping><description><![CDATA[【题意】：给出n个数，问从这n个数中选k个数一共有多少种方案，其中不能包括两个相同的lucky number(lucky number指数位仅包含4和7的数字),1&lt;=k&lt;=n&lt;=100000.<br /><br />【题解】：先把lucky number离散化，然后对lucky number进行dp。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;设dp[i][j]表示前 i 种lucky number选了 j 种的方案数。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dp[i][j] = dp[i-1][j] + dp[i-1][j-1] * c[i],其中c[i]表示第 i 种lucky number的个数。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;然后ans = &#8721;C(cnt, i) * dp[luckycnt][k-i], cnt 为非lucky number数目，luckycnt 为lucky number 种类数。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;注意，组合数需要用逆元处理。<br /><br />【代码】：<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;100050<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;ll&nbsp;MOD&nbsp;=&nbsp;1000000007LL;<br /><span style="color: #008080; ">19</span>&nbsp;map&lt;<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">int</span>&gt;&nbsp;mp;<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;k;<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;luckycnt,&nbsp;cnt;<br /><span style="color: #008080; ">22</span>&nbsp;ll&nbsp;dp[1500],&nbsp;c[1500],&nbsp;p[maxn];<br /><span style="color: #008080; ">23</span>&nbsp;<br /><span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(c,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(c));<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;luckycnt&nbsp;=&nbsp;cnt&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp.clear();<br /><span style="color: #008080; ">28</span>&nbsp;}<br /><span style="color: #008080; ">29</span>&nbsp;<br /><span style="color: #008080; ">30</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;check(<span style="color: #0000FF; ">int</span>&nbsp;x)&nbsp;{<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(x)&nbsp;{<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(x&nbsp;%&nbsp;10&nbsp;!=&nbsp;4&nbsp;&amp;&amp;&nbsp;x&nbsp;%&nbsp;10&nbsp;!=&nbsp;7)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;/=&nbsp;10;<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">36</span>&nbsp;}<br /><span style="color: #008080; ">37</span>&nbsp;<br /><span style="color: #008080; ">38</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Gcd(ll&nbsp;a,&nbsp;ll&nbsp;b,&nbsp;ll&nbsp;&amp;d,&nbsp;ll&nbsp;&amp;x,&nbsp;ll&nbsp;&amp;y)&nbsp;{<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!b)&nbsp;{<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;a,&nbsp;x&nbsp;=&nbsp;1,&nbsp;y&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gcd(b,&nbsp;a&nbsp;%&nbsp;b,&nbsp;d,&nbsp;y,&nbsp;x);<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;-=&nbsp;x&nbsp;*&nbsp;(a&nbsp;/&nbsp;b);<br /><span style="color: #008080; ">45</span>&nbsp;}<br /><span style="color: #008080; ">46</span>&nbsp;<br /><span style="color: #008080; ">47</span>&nbsp;ll&nbsp;inv(ll&nbsp;a,&nbsp;ll&nbsp;n)&nbsp;{<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;d,&nbsp;x,&nbsp;y;<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gcd(a,&nbsp;n,&nbsp;d,&nbsp;x,&nbsp;y);<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(d&nbsp;==&nbsp;1)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(x&nbsp;%&nbsp;n&nbsp;+&nbsp;n)&nbsp;%&nbsp;n;<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br /><span style="color: #008080; ">52</span>&nbsp;}<br /><span style="color: #008080; ">53</span>&nbsp;<br /><span style="color: #008080; ">54</span>&nbsp;ll&nbsp;C(ll&nbsp;n,&nbsp;ll&nbsp;m)&nbsp;{<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(m&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(m&nbsp;&gt;&nbsp;n)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;res&nbsp;=&nbsp;(p[n]&nbsp;*&nbsp;inv(p[m],&nbsp;MOD))&nbsp;%&nbsp;MOD;<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;=&nbsp;(res&nbsp;*&nbsp;inv(p[n-m],&nbsp;MOD))&nbsp;%&nbsp;MOD;<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;res;<br /><span style="color: #008080; ">60</span>&nbsp;}<br /><span style="color: #008080; ">61</span>&nbsp;<br /><span style="color: #008080; ">62</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;solve()&nbsp;{<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dp,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(dp));<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[0]&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;luckycnt;&nbsp;i++)<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;i;&nbsp;j;&nbsp;j--)<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[j]&nbsp;=&nbsp;(dp[j]&nbsp;+&nbsp;dp[j-1]&nbsp;*&nbsp;c[i])&nbsp;%&nbsp;MOD;<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;ans&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;=&nbsp;k&nbsp;&amp;&amp;&nbsp;i&nbsp;&lt;=&nbsp;cnt;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(k&nbsp;-&nbsp;i&nbsp;&gt;&nbsp;luckycnt)&nbsp;<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;(ans&nbsp;+&nbsp;C(cnt,&nbsp;i)&nbsp;*&nbsp;dp[k-i])&nbsp;%&nbsp;MOD;<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;ans&nbsp;&lt;&lt;&nbsp;endl;<br /><span style="color: #008080; ">74</span>&nbsp;}<br /><span style="color: #008080; ">75</span>&nbsp;<br /><span style="color: #008080; ">76</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[0]&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;maxn;&nbsp;i++)&nbsp;p[i]&nbsp;=&nbsp;(p[i-1]&nbsp;*&nbsp;i)&nbsp;%&nbsp;MOD;<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cin&nbsp;&gt;&gt;&nbsp;n&nbsp;&gt;&gt;&nbsp;k)&nbsp;{<br /><span style="color: #008080; ">80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /><span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0,&nbsp;val;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;&gt;&gt;&nbsp;val;<br /><span style="color: #008080; ">83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(check(val))&nbsp;{<br /><span style="color: #008080; ">84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(mp.find(val)&nbsp;==&nbsp;mp.end())&nbsp;mp[val]&nbsp;=&nbsp;++luckycnt;<br /><span style="color: #008080; ">85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[mp[val]]++;<br /><span style="color: #008080; ">86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;cnt++;<br /><span style="color: #008080; ">87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();<br /><span style="color: #008080; ">89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">91</span>&nbsp;}<br /><span style="color: #008080; ">92</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/164614.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-01-28 22:25 <a href="http://www.cppblog.com/y346491470/articles/164614.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>