﻿<?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++博客-广交天下ACM爱好者-文章分类-HDU题解</title><link>http://www.cppblog.com/goAheadtw/category/15891.html</link><description>haha</description><language>zh-cn</language><lastBuildDate>Wed, 02 Feb 2011 02:09:05 GMT</lastBuildDate><pubDate>Wed, 02 Feb 2011 02:09:05 GMT</pubDate><ttl>60</ttl><item><title>hdu3440(差分约束)</title><link>http://www.cppblog.com/goAheadtw/articles/139140.html</link><dc:creator>tw</dc:creator><author>tw</author><pubDate>Sat, 22 Jan 2011 17:13:00 GMT</pubDate><guid>http://www.cppblog.com/goAheadtw/articles/139140.html</guid><wfw:comment>http://www.cppblog.com/goAheadtw/comments/139140.html</wfw:comment><comments>http://www.cppblog.com/goAheadtw/articles/139140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/goAheadtw/comments/commentRss/139140.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/goAheadtw/services/trackbacks/139140.html</trackback:ping><description><![CDATA[<h1 style="COLOR: #1a5cc8">题目网址： <a href="http://acm.hdu.edu.cn/showproblem.php?pid=3440">http://acm.hdu.edu.cn/showproblem.php?pid=3440</a>&nbsp;</h1>
<h1 style="COLOR: #1a5cc8">House Man</h1>
<font size=+0><strong><span style="FONT-FAMILY: Arial; COLOR: green; FONT-SIZE: 12px; FONT-WEIGHT: bold">Time Limit: 2000/1000 MS (Java/Others)&nbsp;&nbsp;&nbsp;&nbsp;Memory Limit: 32768/32768 K (Java/Others)<br>Total Submission(s): 446&nbsp;&nbsp;&nbsp;&nbsp;Accepted Submission(s): 157<br></span></strong></font><br><br>
<div class=panel_title align=left>Problem Description</div>
<div class=panel_content>In Fuzhou, there is a crazy super man. He can&#8217;t fly, but he could jump from housetop to housetop. Today he plans to use N houses to hone his house hopping skills. He will start at the shortest house and make N-1 jumps, with each jump taking him to a taller house than the one he is jumping from. When finished, he will have been on every house exactly once, traversing them in increasing order of height, and ending up on the tallest house. <br>The man can travel for at most a certain horizontal distance D in a single jump. To make this as much fun as possible, the crazy man want to maximize the distance between the positions of the shortest house and the tallest house. <br>The crazy super man have an ability—move houses. So he is going to move the houses subject to the following constraints:<br>1. All houses are to be moved along a one-dimensional path. <br>2. Houses must be moved at integer locations along the path, with no two houses at the same location. <br>3. Houses must be arranged so their moved ordering from left to right is the same as their ordering in the input. They must NOT be sorted by height, or reordered in any way. They must be kept in their stated order. <br>4. The super man can only jump so far, so every house must be moved close enough to the next taller house. Specifically, they must be no further than D apart on the ground (the difference in their heights doesn't matter). <br>Given N houses, in a specified order, each with a distinct integer height, help the super man figure out the maximum possible distance they can put between the shortest house and the tallest house, and be able to use the houses for training. <br></div>
<div class=panel_bottom>&nbsp;</div>
<br>
<div class=panel_title align=left>Input</div>
<div class=panel_content>In the first line there is an integer T, indicates the number of test cases.(T&lt;=500)<br>Each test case begins with a line containing two integers N (1 &#8804; N &#8804; 1000) and D (1 &#8804; D &#8804;1000000). The next line contains N integer, giving the heights of the N houses, in the order that they should be moved. Within a test case, all heights will be unique. <br></div>
<div class=panel_bottom>&nbsp;</div>
<br>
<div class=panel_title align=left>Output</div>
<div class=panel_content>For each test case , output &#8220;Case %d: &#8220;first where d is the case number counted from one, then output a single integer representing the maximum distance between the shortest and tallest house, subject to the constraints above, or -1 if it is impossible to lay out the houses. Do not print any blank lines between answers.</div>
<div class=panel_bottom>&nbsp;</div>
<br>
<div class=panel_title align=left>Sample Input</div>
<div class=panel_content>
<pre>
<div style="FONT-FAMILY: Courier New,Courier,monospace">3
4 4
20 30 10 40
5 6
20 34 54 10 15
4 2
10 20 16 13 </div>
</pre>
</div>
<div class=panel_bottom>&nbsp;</div>
<br>
<div class=panel_title align=left>Sample Output</div>
<div class=panel_content>
<pre>
<div style="FONT-FAMILY: Courier New,Courier,monospace">Case 1: 3
Case 2: 3
Case 3: -1</div>
</pre>
</div>
<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Bellman_Ford&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">memory</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">algorithm</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">vector</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">map</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cmath</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">queue</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">time.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;<br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">limits</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;typev&nbsp;int</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;N&nbsp;1005</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;inf&nbsp;0x7fffffff&nbsp;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;E&nbsp;(N*5)&nbsp;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;pi&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;acos(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">);&nbsp;<br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;e{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;st,&nbsp;ed;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;typev&nbsp;len;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;_st,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;_ed,&nbsp;typev&nbsp;_len){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_st;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ed&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_ed;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_len;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}es[E];<br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;node{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;h;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;&nbsp;<br>}nodes[N];<br>e</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;fir[N];&nbsp;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,&nbsp;en,&nbsp;d;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;st,&nbsp;ed;&nbsp;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;vis[N],&nbsp;t[N],&nbsp;que[N];&nbsp;<br>typev&nbsp;dist[N];&nbsp;<br>inline&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;cmp(node&nbsp;n1,&nbsp;node&nbsp;n2){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;n1.h&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;n2.h;&nbsp;<br>}<br>inline&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;relax(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;st,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ed,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dist[st]&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;inf&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;dist[ed]&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;dist[st]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;len){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[ed]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dist[st]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;len;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;Bellman_Ford(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;st){&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回true表示有负环</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,&nbsp;j;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;flag;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;dist[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;inf;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;dist[st]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;en;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(relax(es[j].st,&nbsp;es[j].ed,&nbsp;es[j].len))&nbsp;flag&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">flag)&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;flag;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cnt&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(){<br>#ifndef&nbsp;ONLINE_JUDGE<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">in.txt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;stdin);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">freopen("out.txt",&nbsp;"w",&nbsp;stdout);&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t,&nbsp;i,&nbsp;ans,&nbsp;u,&nbsp;v;<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">t);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(t</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">d);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">nodes[i].h);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodes[i].i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;en&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;st&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ed&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(nodes,&nbsp;nodes</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">n,&nbsp;cmp);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nodes[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].i;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ed&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nodes[n&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].i;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(st&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;ed)&nbsp;swap(st,&nbsp;ed);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;fir[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;es[en</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">].</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">(i,&nbsp;i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nodes[i].i;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nodes[i&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].i;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(u&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;v){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;es[en</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">].</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">(u,&nbsp;v,&nbsp;d);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;es[en</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">].</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">(v,&nbsp;u,&nbsp;d);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">Bellman_Ford(n,&nbsp;st))&nbsp;ans&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dist[ed];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;ans&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Case&nbsp;%d:&nbsp;%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">cnt,&nbsp;ans);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}<br><br><br><br></span></div>
<img src ="http://www.cppblog.com/goAheadtw/aggbug/139140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/goAheadtw/" target="_blank">tw</a> 2011-01-23 01:13 <a href="http://www.cppblog.com/goAheadtw/articles/139140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu3436(数据结构)</title><link>http://www.cppblog.com/goAheadtw/articles/139120.html</link><dc:creator>tw</dc:creator><author>tw</author><pubDate>Sat, 22 Jan 2011 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/goAheadtw/articles/139120.html</guid><wfw:comment>http://www.cppblog.com/goAheadtw/comments/139120.html</wfw:comment><comments>http://www.cppblog.com/goAheadtw/articles/139120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/goAheadtw/comments/commentRss/139120.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/goAheadtw/services/trackbacks/139120.html</trackback:ping><description><![CDATA[//用树状数组实现求和和查询第k个元素的功能<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">memory</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">algorithm</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">vector</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">map</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cmath</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">queue</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">time.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;<br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">limits</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;N&nbsp;100005</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;typev&nbsp;int&nbsp;</span><span style="COLOR: #000000"><br>typev&nbsp;ar[N</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">];&nbsp;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ks[N],&nbsp;num[N],&nbsp;pos[N],&nbsp;id[N];<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;has[N];&nbsp;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;kn,&nbsp;n,&nbsp;qn,&nbsp;fr;&nbsp;<br></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;qs[N];&nbsp;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;vMax;&nbsp;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;lowb(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t){&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;t&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">t);&nbsp;}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;add(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,&nbsp;typev&nbsp;v){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;vMax;&nbsp;ar[i]&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;v,&nbsp;i&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;lowb(i))&nbsp;;&nbsp;<br>}<br>typev&nbsp;sum(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i){<br>&nbsp;&nbsp;&nbsp;&nbsp;typev&nbsp;s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;s&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;ar[i],&nbsp;i&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;lowb(i));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;s;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;find_k(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k){&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">find&nbsp;the&nbsp;kth&nbsp;number</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;pos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;cnt&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;i;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;log((</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">)vMax)&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;log(</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;i);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pos&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;vMax&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;cnt&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;ar[pos]&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;k)&nbsp;pos&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;i);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;cnt&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;ar[pos];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;pos&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;input(){<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">qn);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ops[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;qn;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;ops,&nbsp;num</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ks[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;num[i];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qs[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ops[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;init(){<br>&nbsp;&nbsp;&nbsp;&nbsp;kn&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;qn;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;ks[kn</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;sort(ks,&nbsp;ks</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">kn);&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,&nbsp;j;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;kn;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(ks[i]&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;ks[j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])&nbsp;ks[j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ks[i];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;kn&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;j;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;vMax&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;qn&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;kn&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;fill(ar,&nbsp;ar</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">vMax</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;fr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;qn;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cnt&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;solve(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,&nbsp;pMax,&nbsp;val,&nbsp;p,&nbsp;s,&nbsp;ans;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;init();&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;ks[kn]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;kn;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ks[i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">ks[i];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;qn&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(pos[i],&nbsp;val);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Case&nbsp;%d:\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">cnt);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;qn;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(qs[i]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;lower_bound(ks,&nbsp;ks</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">kn,&nbsp;num[i])&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;ks;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has[p]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(pos[p],&nbsp;val);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id[fr]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;num[i];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[p]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fr</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(pos[p],&nbsp;val);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(qs[i]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">R</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;find_k(num[i]);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(p&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;qn){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;id[p];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sum(p</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;num[i]&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;s&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;ks[p&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;qn&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">has[p&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;qn&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])&nbsp;ans</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;&nbsp;<br>&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;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">'Q'</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;lower_bound(ks,&nbsp;ks</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">kn,&nbsp;num[i])&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;ks;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sum(pos[p]&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;ans&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(){<br>#ifndef&nbsp;ONLINE_JUDGE<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">in.txt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;stdin);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">freopen("out.txt",&nbsp;"w",&nbsp;stdout);&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">t);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(t</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input();&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}<br><br><br><br><br><br></span></div>
<img src ="http://www.cppblog.com/goAheadtw/aggbug/139120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/goAheadtw/" target="_blank">tw</a> 2011-01-22 16:58 <a href="http://www.cppblog.com/goAheadtw/articles/139120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu3433(dp)</title><link>http://www.cppblog.com/goAheadtw/articles/139038.html</link><dc:creator>tw</dc:creator><author>tw</author><pubDate>Fri, 21 Jan 2011 08:44:00 GMT</pubDate><guid>http://www.cppblog.com/goAheadtw/articles/139038.html</guid><wfw:comment>http://www.cppblog.com/goAheadtw/comments/139038.html</wfw:comment><comments>http://www.cppblog.com/goAheadtw/articles/139038.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/goAheadtw/comments/commentRss/139038.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/goAheadtw/services/trackbacks/139038.html</trackback:ping><description><![CDATA[题目来源：<a href="http://acm.hdu.edu.cn/showproblem.php?pid=3433">http://acm.hdu.edu.cn/showproblem.php?pid=3433</a>&nbsp;<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;<br>题目描述:&nbsp;N个人,第i个人完成一个A任务需要时间ai,完成一个B任务需要时间bi，<br>现在又X个任务A和Y个任务B，求完成所有任务所需要的最短时间。<br>解法：二分时间t，dp[i][j]表示前i个人完成j个A任务所能够完成的B任务的数量<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000">&nbsp;<br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">memory</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">algorithm</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">vector</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">map</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cmath</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">queue</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">time.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;<br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">limits</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;XY&nbsp;205</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;N&nbsp;55</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;inf&nbsp;0x7fffffff</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[N],&nbsp;b[N],&nbsp;dp[XY],&nbsp;n,&nbsp;X,&nbsp;Y;&nbsp;<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;check(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t){&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断在时间t内是否可以完成所有的任务</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,&nbsp;j,&nbsp;k,&nbsp;kMax;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;X;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;dp[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;dp[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kMax&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;min(X,&nbsp;t&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;a[i]);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dp[X]&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;Y)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;X;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(k&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;k&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;kMax&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">第i个人完成k件</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dp[j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">k]&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[j]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;max(dp[j],&nbsp;dp[j&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;k]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;(t&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;k&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;a[i])&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;b[i]);&nbsp;<br>&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;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;dp[X]&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;Y;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(){<br>#ifndef&nbsp;ONLINE_JUDGE<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">in.txt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;stdin);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">freopen("out.txt",&nbsp;"w",&nbsp;stdout);&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t,&nbsp;i,ca,&nbsp;low,&nbsp;high,&nbsp;mid;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">t);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(ca&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;ca&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;t;&nbsp;ca</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">X,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">Y);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;high&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;inf;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i,&nbsp;b</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;high&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;min(high,&nbsp;a[i]&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;b[i]&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Y);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(low&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;high){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(low&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;high)&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;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(check(mid))&nbsp;high&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mid&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;low&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mid&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Case&nbsp;%d:&nbsp;%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;ca,&nbsp;high&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}<br><br><br><br></span></div>
<img src ="http://www.cppblog.com/goAheadtw/aggbug/139038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/goAheadtw/" target="_blank">tw</a> 2011-01-21 16:44 <a href="http://www.cppblog.com/goAheadtw/articles/139038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu3434</title><link>http://www.cppblog.com/goAheadtw/articles/139032.html</link><dc:creator>tw</dc:creator><author>tw</author><pubDate>Fri, 21 Jan 2011 08:01:00 GMT</pubDate><guid>http://www.cppblog.com/goAheadtw/articles/139032.html</guid><wfw:comment>http://www.cppblog.com/goAheadtw/comments/139032.html</wfw:comment><comments>http://www.cppblog.com/goAheadtw/articles/139032.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/goAheadtw/comments/commentRss/139032.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/goAheadtw/services/trackbacks/139032.html</trackback:ping><description><![CDATA[<h1 style="COLOR: #1a5cc8">题目来源： <a href="http://acm.hdu.edu.cn/showproblem.php?pid=3434">http://acm.hdu.edu.cn/showproblem.php?pid=3434</a>&nbsp;</h1>
<h1 style="COLOR: #1a5cc8">Sequence Adjustment</h1>
<p><font size=+0><strong><span style="FONT-FAMILY: Arial; COLOR: green; FONT-SIZE: 12px; FONT-WEIGHT: bold">Time Limit: 2000/1000 MS (Java/Others)&nbsp;&nbsp;&nbsp;&nbsp;Memory Limit: 32768/32768 K (Java/Others)<br>Total Submission(s): 463&nbsp;&nbsp;&nbsp;&nbsp;Accepted Submission(s): 144<br></span></strong></font><br><br></p>
<div class=panel_title align=left>Problem Description</div>
<div class=panel_content>Given a sequence consists of N integers. Each time you can choose a continuous subsequence and add 1 or minus 1 to the numbers in the subsequence .You task is to make all the numbers the same with <br>the least tries. You should calculate the number of the least tries <br>you needed and the number of different final sequences with the least tries.</div>
<div class=panel_bottom>&nbsp;</div>
<p><br>&nbsp;</p>
<div class=panel_title align=left>Input</div>
<div class=panel_content>In the first line there is an integer T, indicates the number of test cases.(T&lt;=30)<br>In each case, the first line contain one integer N(1&lt;=N&lt;=10^6), <br>the second line contain N integers and each integer in the sequence is between [1,10^9].<br>There may be some blank lines between each case.<br></div>
<div class=panel_bottom>&nbsp;</div>
<p><br>&nbsp;</p>
<div class=panel_title align=left>Output</div>
<div class=panel_content>For each test case , output &#8220;Case d: x y &#8220; where d is the case number <br>counted from one, x is the number of the least tries you need and y <br>is the number of different final sequences with the least tries.</div>
<div class=panel_bottom>&nbsp;</div>
<p><br>&nbsp;</p>
<div class=panel_title align=left>Sample Input</div>
<div class=panel_content>
<pre>
<div style="FONT-FAMILY: Courier New,Courier,monospace">2
2
2 4
6
1 1 1 2 2 2</div>
</pre>
</div>
<div class=panel_bottom>&nbsp;</div>
<p><br>&nbsp;</p>
<div class=panel_title align=left>Sample Output</div>
<div class=panel_content>
<pre>
<div style="FONT-FAMILY: Courier New,Courier,monospace">Case 1: 2 3
Case 2: 1 2
<div style="BORDER-BOTTOM: #b7cbff 1px dashed; BORDER-LEFT: #b7cbff 1px dashed; PADDING-BOTTOM: 6px; BACKGROUND-COLOR: #f4fbff; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; FONT-FAMILY: Times New Roman; FONT-SIZE: 14px; BORDER-TOP: #b7cbff 1px dashed; BORDER-RIGHT: #b7cbff 1px dashed; PADDING-TOP: 6px">
<div style="BORDER-BOTTOM: #b7cbff 1px dashed; FONT-FAMILY: Arial; COLOR: #7ca9ed; FONT-WEIGHT: bold"><em>Hint</em></div>
In sample 1, we can add 1 twice at index 1 to get {4,4},or
minus 1 twice at index 2 to get {2,2}, or we can add 1 once at index 1
and minus 1 once at index 2 to get {3,3}. So there are three different final sequences.</div>
<em style="FONT-SIZE: 1px"> </em></div>
</pre>
</div>
<div class=panel_bottom>&nbsp;</div>
<p><br>&nbsp;</p>
<div class=panel_title align=left>Author</div>
<div class=panel_content>wzc1989</div>
<div class=panel_bottom>&nbsp;</div>
<p><br>&nbsp;</p>
<div class=panel_title align=left>Source</div>
<div class=panel_content><a href="http://acm.hdu.edu.cn/search.php?field=problem&amp;key=2010 ACM-ICPC Multi-University Training Contest（1）——Host by FZU&amp;source=1&amp;searchmode=source"><u><font color=#800080>2010 ACM-ICPC Multi-University Training Contest（1）——Host by FZU </font></u></a></div>
<p><br><span style="COLOR: #0000ff">/*<br>更详尽的解题报告见： </span><a href="http://hi.baidu.com/liwang112358/blog/item/3dac7e566f300f55d0090679.html"><span style="COLOR: #0000ff">http://hi.baidu.com/liwang112358/blog/item/3dac7e566f300f55d0090679.html</span></a><span style="COLOR: #0000ff">&nbsp;<br>*/<br>#include &lt;stdio.h&gt;<br>#include &lt;memory&gt;<br>#include &lt;iostream&gt;<br>#include &lt;algorithm&gt;<br>#include &lt;cstring&gt;<br>#include &lt;vector&gt;<br>#include &lt;map&gt;<br>#include &lt;cmath&gt;<br>#include &lt;set&gt;<br>#include &lt;queue&gt;<br>#include &lt;time.h&gt; <br>#include &lt;limits&gt;<br>using namespace std;<br>#define N 1000005<br>#define ll long long <br>#define ABS(a) (a &gt; 0 ? a : -a)<br>ll a[N], p[N]; <br>int main(){<br>#ifndef ONLINE_JUDGE<br>&nbsp;freopen("in.txt", "r", stdin); <br>&nbsp;//freopen("out.txt", "w", stdout); <br>#endif <br>&nbsp;int t, n, ca; <br>&nbsp;ca = a[0] = p[0] = p[1] = 0; <br>&nbsp;scanf("%d", &amp;t);<br>&nbsp;while(t--){<br>&nbsp;&nbsp;scanf("%d", &amp;n);<br>&nbsp;&nbsp;int i, j; <br>&nbsp;&nbsp;ll sum, ans; <br>&nbsp;&nbsp;for(i = 1; i &lt;= n; i++) scanf("%d", a+i);<br>&nbsp;&nbsp;for(i = 2, j = 1; i &lt;= n; i++){<br>&nbsp;&nbsp;&nbsp;if(a[i] != a[j]){<br>&nbsp;&nbsp;&nbsp;&nbsp;a[++j] = a[i]; <br>&nbsp;&nbsp;&nbsp;&nbsp;p[j] = a[j] - a[j - 1]; <br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;n = j; <br>&nbsp;&nbsp;ans = sum = 0; <br>&nbsp;&nbsp;for(i = 2; i &lt;= n; i++){<br>&nbsp;&nbsp;&nbsp;if(p[i] * sum &lt; 0) ans += min(ABS(sum), ABS(p[i])); <br>&nbsp;&nbsp;&nbsp;sum += p[i]; <br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;sum = ABS(sum); <br>&nbsp;&nbsp;ans += sum; <br>&nbsp;&nbsp;//printf("Case %d: %lld %lld\n", ++ca, ans, sum + 1);<br>&nbsp;&nbsp;printf("Case %d: %I64d %I64d\n", ++ca, ans, sum + 1);<br>&nbsp;}<br>&nbsp;return 0;<br>}</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/goAheadtw/aggbug/139032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/goAheadtw/" target="_blank">tw</a> 2011-01-21 16:01 <a href="http://www.cppblog.com/goAheadtw/articles/139032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu3596(逆波兰表达式求值)</title><link>http://www.cppblog.com/goAheadtw/articles/138607.html</link><dc:creator>tw</dc:creator><author>tw</author><pubDate>Sun, 16 Jan 2011 11:58:00 GMT</pubDate><guid>http://www.cppblog.com/goAheadtw/articles/138607.html</guid><wfw:comment>http://www.cppblog.com/goAheadtw/comments/138607.html</wfw:comment><comments>http://www.cppblog.com/goAheadtw/articles/138607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/goAheadtw/comments/commentRss/138607.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/goAheadtw/services/trackbacks/138607.html</trackback:ping><description><![CDATA[<span style="COLOR: #0000ff">/*************************************/<br>/*支持数字(而非表达式)前面有正负号&nbsp;&nbsp; */ <br>/*支持浮点数的+，-，*，/,^ 运算&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br>/*************************************/<br></span><span style="COLOR: #800080">#include &lt;stdio.h&gt;<br>#include &lt;memory&gt;<br>#include &lt;iostream&gt;<br>#include &lt;algorithm&gt;<br>#include &lt;cstring&gt;<br>#include &lt;vector&gt;<br>#include &lt;map&gt;<br>#include &lt;cmath&gt;<br>#include &lt;set&gt;<br>#include &lt;queue&gt;<br>#include &lt;time.h&gt; <br>#include &lt;limits&gt;<br>#include &lt;stack&gt;<br>using namespace std;<br>#define N 10005<br>#define eps 1e-9<br>#define vType double <br>struct node{<br>&nbsp;vType val; <br>&nbsp;char op; <br>&nbsp;node(vType _val=0, char _op = ' '):val(_val), op(_op){}<br>}nodes[N];<br>char str[N]; <br>inline bool isDigit(char ch){<br>&nbsp;return ch &gt;= '0' &amp;&amp; ch &lt;= '9'; <br>}<br>map&lt;char, int&gt; ms; <br>void init(){<br>&nbsp;ms['('] = 0; <br>&nbsp;ms['-'] = ms['+'] = 1; <br>&nbsp;ms['*'] = ms['/'] = 2; <br>&nbsp;ms['^'] = 3; <br>}<br>vType calPoland(node* nodes, int k){<br>&nbsp;int i, j; <br>&nbsp;vType a, b; <br>&nbsp;stack&lt;vType&gt; s; <br>&nbsp;for(i = 0; i &lt; k; i++){<br>&nbsp;&nbsp;if(nodes[i].op == ' '){<br>&nbsp;&nbsp;&nbsp;s.push(nodes[i].val); <br>&nbsp;&nbsp;}else{<br>&nbsp;&nbsp;&nbsp;a = s.top();<br>&nbsp;&nbsp;&nbsp;s.pop(); <br>&nbsp;&nbsp;&nbsp;b = s.top(); <br>&nbsp;&nbsp;&nbsp;s.pop(); <br>&nbsp;&nbsp;&nbsp;switch(nodes[i].op){<br>&nbsp;&nbsp;&nbsp;&nbsp;case '+':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(b + a); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br>&nbsp;&nbsp;&nbsp;&nbsp;case '-':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(b - a); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br>&nbsp;&nbsp;&nbsp;&nbsp;case '*':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(b * a); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br>&nbsp;&nbsp;&nbsp;&nbsp;case '/':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(fabs(a) &lt; eps) throw true; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(b / a); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br>&nbsp;&nbsp;&nbsp;&nbsp;case '^':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.push(pow(b, a)); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;return s.top(); <br>}<br>vType poland(char* str){<br>&nbsp;int i, k, sign; <br>&nbsp;bool inNum, hasDot;&nbsp; //inNum标记当前是否可以输入数字, hasDot标记是否已经输入小数点<br>&nbsp;stack&lt;char&gt; oper; <br>&nbsp;for(i = k = 0, sign = 1, inNum = true; str[i]; i++){<br>&nbsp;&nbsp;if(isDigit(str[i]) || str[i] == '.'){<br>&nbsp;&nbsp;&nbsp;if(inNum){<br>&nbsp;&nbsp;&nbsp;&nbsp;vType val; <br>&nbsp;&nbsp;&nbsp;&nbsp;double w = 1; <br>&nbsp;&nbsp;&nbsp;&nbsp;if(str[i] == '.'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hasDot = true; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val = 0; <br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;else{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val = str[i] - '0'; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hasDot = false; <br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;i++; <br>&nbsp;&nbsp;&nbsp;&nbsp;while(isDigit(str[i]) || str[i] == '.'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(str[i] == '.'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(hasDot) throw true; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hasDot = true; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(hasDot){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w *= 0.1; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val += (str[i] - '0') * w; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else val = val * 10 + str[i] - '0'; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++; <br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;i--; <br>&nbsp;&nbsp;&nbsp;&nbsp;nodes[k++] = node(val * sign, ' '); <br>&nbsp;&nbsp;&nbsp;&nbsp;sign = 1; <br>&nbsp;&nbsp;&nbsp;&nbsp;inNum = false; <br>&nbsp;&nbsp;&nbsp;}else throw true; <br>&nbsp;&nbsp;}else{<br>&nbsp;&nbsp;&nbsp;switch(str[i]){<br>&nbsp;&nbsp;&nbsp;&nbsp;case '(':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oper.push(str[i]); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br>&nbsp;&nbsp;&nbsp;&nbsp;case ')':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!oper.empty() &amp;&amp; oper.top() != '('){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodes[k++] = node(0, oper.top()); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oper.pop(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oper.empty()) throw true;&nbsp; //没有与')'匹配的'('<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oper.pop(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br>&nbsp;&nbsp;&nbsp;&nbsp;case '+':<br>&nbsp;&nbsp;&nbsp;&nbsp;case '-':<br>&nbsp;&nbsp;&nbsp;&nbsp;case '*':<br>&nbsp;&nbsp;&nbsp;&nbsp;case '/':<br>&nbsp;&nbsp;&nbsp;&nbsp;case '^':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(inNum){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(str[i] != '+' &amp;&amp; str[i] != '-') throw true; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(str[i] == '+' || str[i] == '-'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(str[i] == '-') sign *= -1; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i--; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//while(!oper.empty() &amp;&amp; ((str[i] != '^' &amp;&amp; ms[str[i]] &lt;= ms[oper.top()]) ||<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;((str[i] == '^' &amp;&amp; ms[str[i]] &lt; ms[oper.top()])))){ //如果^是右结合的话就用这个<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!oper.empty() &amp;&amp; ms[str[i]] &lt;= ms[oper.top()]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodes[k++] = node(0, oper.top()); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oper.pop(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oper.push(str[i]); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inNum = true; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;while(!oper.empty()){<br>&nbsp;&nbsp;nodes[k++] = node(0, oper.top()); <br>&nbsp;&nbsp;oper.pop(); <br>&nbsp;}<br>&nbsp;return calPoland(nodes, k); <br>}<br>void Cal(char* str){<br>&nbsp;try{<br>&nbsp;&nbsp;vType ans = poland(str); <br>&nbsp;&nbsp;printf("%.8lf\n", ans);<br>&nbsp;}<br>&nbsp;catch(bool){<br>&nbsp;&nbsp;printf("The teacher is so lazy!\n");<br>&nbsp;}<br>}<br>int main(){<br>#ifndef ONLINE_JUDGE<br>&nbsp;//freopen("in.txt", "r", stdin); <br>&nbsp;//freopen("out.txt", "w", stdout); <br>#endif <br>&nbsp;init(); <br>&nbsp;while(~scanf("%s", str)) Cal(str); <br>&nbsp;return 0;<br>}<br></span>
<img src ="http://www.cppblog.com/goAheadtw/aggbug/138607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/goAheadtw/" target="_blank">tw</a> 2011-01-16 19:58 <a href="http://www.cppblog.com/goAheadtw/articles/138607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 3624 （算术表达式求值）</title><link>http://www.cppblog.com/goAheadtw/articles/138553.html</link><dc:creator>tw</dc:creator><author>tw</author><pubDate>Fri, 14 Jan 2011 17:43:00 GMT</pubDate><guid>http://www.cppblog.com/goAheadtw/articles/138553.html</guid><wfw:comment>http://www.cppblog.com/goAheadtw/comments/138553.html</wfw:comment><comments>http://www.cppblog.com/goAheadtw/articles/138553.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/goAheadtw/comments/commentRss/138553.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/goAheadtw/services/trackbacks/138553.html</trackback:ping><description><![CDATA[<p><span style="COLOR: #ff0000">/*<br>1、左递归可以用循环来实现，右递归可以用递归实现(也可以用循环实现,不过递归实现起来比较简单)<br>2、左递归实现左结合运算，右递归实现右结合运算<br>hdu 3624(网址： <a href="http://acm.hdu.edu.cn/showproblem.php?pid=3624">http://acm.hdu.edu.cn/showproblem.php?pid=3624</a>&nbsp;) 的文法<br>exp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; addTerm | exp addOp addTerm<br>addOp&nbsp;&nbsp;&nbsp; -&gt; + | - <br>addTerm -&gt; mulTerm | addTerm mulOp mulTerm<br>mulOp&nbsp;&nbsp;&nbsp;&nbsp; -&gt; * | / | % <br>mulTerm -&gt; eTerm ^ mulTerm | eTerm<br>eTerm&nbsp;&nbsp;&nbsp; -&gt;sNum | (exp)<br>sNum&nbsp;&nbsp;&nbsp;&nbsp; -&gt; num | -eTerm <br>*/ <br></span><span style="COLOR: #0000ff">#include &lt;stdio.h&gt;<br>#include &lt;memory&gt;<br>#include &lt;iostream&gt;<br>#include &lt;algorithm&gt;<br>#include &lt;cstring&gt;<br>#include &lt;vector&gt;<br>#include &lt;map&gt;<br>#include &lt;cmath&gt;<br>#include &lt;set&gt;<br>#include &lt;queue&gt;<br>#include &lt;time.h&gt; <br>#include &lt;limits&gt;<br>using namespace std;<br>#define vType long long <br>#define MAXLEN 2005<br>const int vMax = 0x7fffffff; <br>const int vMin = ~vMax; <br>#define checkVal(val) (val &gt;= vMin &amp;&amp; val &lt;= vMax)<br>char str[MAXLEN]; <br>int pos, cnt; //pos为当前扫描位置，cnt为已经分配的节点的数目<br>char ch;&nbsp; //ch为当前扫描的字符<br>struct treeNode{<br>&nbsp;&nbsp;&nbsp; char op, flag;&nbsp; <br>&nbsp;&nbsp;&nbsp; vType val; <br>&nbsp;&nbsp;&nbsp; treeNode* ch[2]; <br>&nbsp;&nbsp;&nbsp; void setFlag(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((ch[0] &amp;&amp; !ch[0]-&gt;flag) || (ch[1] &amp;&amp; !ch[1]-&gt;flag)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flag = false; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>}mem[MAXLEN*10];<br>treeNode* exp(); <br>inline bool isDigit(char ch){<br>&nbsp;&nbsp;&nbsp; return ch &gt;= '0' &amp;&amp; ch &lt;= '9'; <br>} <br>inline treeNode* newNode(){<br>&nbsp;&nbsp;&nbsp; mem[cnt].flag = true; <br>&nbsp;&nbsp;&nbsp; mem[cnt].op = ' ';&nbsp; //op为空格表示不需要运算<br>&nbsp;&nbsp;&nbsp; mem[cnt].ch[0] = mem[cnt].ch[1] = NULL; <br>&nbsp;&nbsp;&nbsp; return &amp;mem[cnt++]; <br>}<br>treeNode* getSyntaxTree(){<br>&nbsp;&nbsp;&nbsp; treeNode* tree; <br>&nbsp;&nbsp;&nbsp; pos = cnt = 0; <br>&nbsp;&nbsp;&nbsp; int i, j; <br>&nbsp;&nbsp;&nbsp; i = j = 0;<br>&nbsp;&nbsp;&nbsp; ch = '\n'; <br>&nbsp;&nbsp;&nbsp; do{&nbsp; //忽略空格<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(str[i] != ' ') str[j++] = str[i]; <br>&nbsp;&nbsp;&nbsp; }while(str[i++]);<br>&nbsp;for(i = j = 0; str[i]; i++){ //加这一步是为了处理2000个(的变态数据<br>&nbsp;&nbsp;if(str[i] == '(') j++; <br>&nbsp;&nbsp;else if(str[i] == ')') j--; <br>&nbsp;}<br>&nbsp;if(j != 0){<br>&nbsp;&nbsp;tree = newNode(); <br>&nbsp;&nbsp;tree-&gt;flag = false; <br>&nbsp;}else tree = exp();<br>&nbsp;&nbsp;&nbsp; return tree; <br>}<br>treeNode* eTerm(){<br>&nbsp;&nbsp;&nbsp; treeNode* t; <br>&nbsp;&nbsp;&nbsp; t = newNode(); <br>&nbsp;&nbsp;&nbsp; ch = str[pos++]; <br>&nbsp;&nbsp;&nbsp; if(ch == '('){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = exp();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(ch != ')') t-&gt;flag = false; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else ch = str[pos++]; <br>&nbsp;&nbsp;&nbsp; }else if(isDigit(ch)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vType a = ch - '0';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(ch = str[pos++];isDigit(ch); ch = str[pos++]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(t-&gt;flag){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = a * 10 + ch - '0'; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!checkVal(a)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t-&gt;flag = false; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;t-&gt;val = a; <br>&nbsp;}else if(ch == '-'){<br>&nbsp;&nbsp;t-&gt;op = ch; <br>&nbsp;&nbsp;t-&gt;ch[0] = newNode(); <br>&nbsp;&nbsp;t-&gt;ch[0]-&gt;val = 0; <br>&nbsp;&nbsp;t-&gt;ch[1] = eTerm(); <br>&nbsp;&nbsp;t-&gt;setFlag(); <br>&nbsp;}else t-&gt;flag = false; <br>&nbsp;&nbsp;&nbsp; return t; <br>}<br>treeNode* mulTerm(){ <br>&nbsp;&nbsp;&nbsp; treeNode *t, *p, *r, *t0, *t1;; <br>&nbsp;&nbsp;&nbsp; r = t = eTerm(); <br>&nbsp;p = NULL; <br>&nbsp;&nbsp;&nbsp; while(ch == '^'){ //循环实现右递归文法<br>&nbsp;&nbsp;t1 = newNode(); <br>&nbsp;&nbsp;t1-&gt;op = ch;<br>&nbsp;&nbsp;t1-&gt;ch[0] = t; <br>&nbsp;&nbsp;t0 = eTerm(); <br>&nbsp;&nbsp;t1-&gt;ch[1] = t0; <br>&nbsp;&nbsp;if(p){<br>&nbsp;&nbsp;&nbsp;p-&gt;ch[1] = t1; <br>&nbsp;&nbsp;}else r = t1; <br>&nbsp;&nbsp;p = t1; <br>&nbsp;&nbsp;t = t0; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return r; <br>}<br>treeNode* addTerm(){<br>&nbsp;&nbsp;&nbsp; treeNode *t, *p; <br>&nbsp;&nbsp;&nbsp; t = newNode(); <br>&nbsp;&nbsp;&nbsp; t-&gt;ch[0] = mulTerm(); <br>&nbsp;&nbsp;&nbsp; t-&gt;setFlag(); <br>&nbsp;&nbsp;&nbsp; while(ch == '*' || ch == '/' || ch == '%'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t-&gt;op = ch; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t-&gt;ch[1] = mulTerm(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t-&gt;setFlag(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = t; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = newNode(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t-&gt;ch[0] = p; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return t; <br>}<br>treeNode* exp(){<br>&nbsp;&nbsp;&nbsp; treeNode *t, *p; <br>&nbsp;&nbsp;&nbsp; t = newNode(); <br>&nbsp;&nbsp;&nbsp; t-&gt;ch[0] = addTerm(); <br>&nbsp;&nbsp;&nbsp; while(ch == '-' || ch == '+'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t-&gt;op = ch; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t-&gt;ch[1] = addTerm();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = t; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = newNode(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t-&gt;ch[0] = p; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return t; <br>}<br>void cal(treeNode* root){ <br>&nbsp;&nbsp;&nbsp; if(!root) return; <br>&nbsp;&nbsp;&nbsp; cal(root-&gt;ch[0]); <br>&nbsp;&nbsp;&nbsp; cal(root-&gt;ch[1]); <br>&nbsp;&nbsp;&nbsp; root-&gt;setFlag(); <br>&nbsp;&nbsp;&nbsp; if(!root-&gt;flag) return; <br>&nbsp;&nbsp;&nbsp; if(root-&gt;op != ' '){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vType a = 0; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch(root-&gt;op){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '-':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = root-&gt;ch[0]-&gt;val - root-&gt;ch[1]-&gt;val; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '+':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = root-&gt;ch[0]-&gt;val + root-&gt;ch[1]-&gt;val; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '*':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = root-&gt;ch[0]-&gt;val * root-&gt;ch[1]-&gt;val; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '/':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(root-&gt;ch[1]-&gt;val == 0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root-&gt;flag = false; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return; <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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = root-&gt;ch[0]-&gt;val / root-&gt;ch[1]-&gt;val; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '%':<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(root-&gt;ch[1]-&gt;val == 0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root-&gt;flag = 0; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return; <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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = root-&gt;ch[0]-&gt;val % root-&gt;ch[1]-&gt;val; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '^':<br>&nbsp;&nbsp;&nbsp;&nbsp;if(root-&gt;ch[1]-&gt;val &lt; 0 || (root-&gt;ch[0]-&gt;val == 0 &amp;&amp; root-&gt;ch[1]-&gt;val == 0)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root-&gt;flag = false; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return; <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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double b = pow((double)root-&gt;ch[0]-&gt;val, (double)root-&gt;ch[1]-&gt;val); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(checkVal(b)) a = (vType)b; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root-&gt;flag = false; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return; <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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;if(checkVal(a)){<br>&nbsp;&nbsp;&nbsp;root-&gt;val = a; <br>&nbsp;&nbsp;&nbsp;root-&gt;setFlag();<br>&nbsp;&nbsp;}else{<br>&nbsp;&nbsp;&nbsp;root-&gt;flag = false; <br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp; }else if(root-&gt;ch[0]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root-&gt;flag = root-&gt;ch[0]-&gt;flag; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root-&gt;val = root-&gt;ch[0]-&gt;val; <br>&nbsp;&nbsp;&nbsp; }<br>}<br>int main(){<br>#ifndef ONLINE_JUDGE<br>&nbsp;//freopen("in.txt", "r", stdin); <br>&nbsp;&nbsp;&nbsp; //freopen("out.txt", "w", stdout); <br>#endif <br>&nbsp;&nbsp;&nbsp; int i, c; <br>&nbsp;&nbsp;&nbsp; treeNode* root; <br>&nbsp;&nbsp;&nbsp; scanf("%d", &amp;c);<br>&nbsp;&nbsp;&nbsp; getchar(); <br>&nbsp;&nbsp;&nbsp; for(i = 1; i &lt;= c; i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gets(str); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root = getSyntaxTree(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Case %d: ", i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cal(root); <br>&nbsp;&nbsp;if(root-&gt;flag){<br>&nbsp;&nbsp;&nbsp;printf("%I64d\n", root-&gt;val);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else printf("ERROR!\n");<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return 0;<br>}</span></p>
<p><span style="COLOR: #0000ff"></span>&nbsp;</p>
<img src ="http://www.cppblog.com/goAheadtw/aggbug/138553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/goAheadtw/" target="_blank">tw</a> 2011-01-15 01:43 <a href="http://www.cppblog.com/goAheadtw/articles/138553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>