﻿<?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>BlogJava-[NKU]sweet ＠ ICPC || TopCoder ||Other-随笔分类-学习心得</title><link>http://www.blogjava.net/sweetsc/category/50265.html</link><description>执念，自从2004</description><language>zh-cn</language><lastBuildDate>Thu, 26 Jan 2012 15:00:29 GMT</lastBuildDate><pubDate>Thu, 26 Jan 2012 15:00:29 GMT</pubDate><ttl>60</ttl><item><title>编译原理入门以及战大作业心得（2）汇编简易入门</title><link>http://www.blogjava.net/sweetsc/archive/2012/01/26/368903.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Thu, 26 Jan 2012 14:42:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2012/01/26/368903.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/368903.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2012/01/26/368903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/368903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/368903.html</trackback:ping><description><![CDATA[<div><div>应刁哥多年前的约稿，外加结合编译原理系列连载，整理一下上一篇文章，写一个简易的汇编教程&#8230;&#8230;</div><div>尽管谬误，疏漏若干，但是本文的目的不在于培养学霸，而在于让不会汇编的人简单看看就能写出个基本能用的汇编程序&#8230;&#8230;</div><div></div><div>在程序设计中，我们知道一项基本原理：语言越高级，一般来讲容易编写，形式简洁，可移植性强，效率低&#8230;&#8230;</div><div>反过来，语言越低级，越难编写，代码越容易是又臭又长还看不懂，越难移植，但是效率会很高&#8230;&#8230;</div><div>汇编就是比较低级的语言了，由于其不太好移植，汇编版本又多种多样</div><div>因此，本着活学活用，到时候不会就查手册的原则，本文不会太着重强调语法，语法以intel语法为主&#8230;&#8230;</div><div></div><div>Chapter1：一些基本知识</div><div>首先，CPU有若干寄存器，在32位CPU中，形如eax，ebx，ecx，edx&#8230;&#8230;64位CPU则为rax，rbx&#8230;&#8230;</div><div>虽然寄存器这个名字很NB，其实它的本质上就是int，为了向下兼容的需要，一些老的程序，也有可能能在新型的CPU上运行（详见DOS老游戏，有的能玩，有的不能玩）</div><div>以64位举例：</div><div>64位寄存器rax，低32位是eax，eax低16位是ax，ax高8位叫ah，低8位叫al&#8230;&#8230;</div><div>CPU只能直接对寄存器进行运算&#8230;&#8230;因为电路结构就是那样的&#8230;&#8230;因此，所有的操作，都需要经过寄存器</div><div>譬如赋值：A = 1，实际上是 AX = 1; A = AX; 譬如 A = A + B，应该是 AX = A; AX += B; A = AX; 这样</div><div>我是比较不求甚解的，99%功能（运算，判断，指针）等，使用eax，ebx，ecx，edx都能搞定&#8230;&#8230;于是咱们也就不说别的了&#8230;&#8230;</div><div></div><div>Chapter2：汇编的基本语法：</div><div>汇编语言大概分为四个段，其中比较需要记住的就是代码段和数据段&#8230;&#8230;</div><div>用类似高级语言的思路来讲，数据段用于定义一些全局变量，代码段用于写程序&#8230;&#8230;</div><div>来看一个简单的 Hello World（环境：yasm，64位）</div><div></div><div>global main&nbsp;</div><div>extern printf&nbsp;</div><div></div><div>section .data&nbsp;</div><div><span style="white-space:pre">	</span>ctrlout &nbsp; db &nbsp; &nbsp; &nbsp;'%s', 10, 0&nbsp;</div><div><span style="white-space:pre">	</span>hw &nbsp; &nbsp;db &nbsp; &nbsp; &nbsp;'Hello World', 0&nbsp;</div><div></div><div>; this is a comment</div><div></div><div>section .text</div><div>main:</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rax, 0</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rdi, ctrlout</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rsi, hw</div><div><span style="white-space:pre">	</span>call <span style="white-space:pre">	</span>printf</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov rax, 0</div><div>ret</div><div></div><div>其中，刚开始global main 表示程序入口，由于这里直接调用了Linux的函数printf，之后需要gcc编译，所以叫做main，如果只使用中断输出的话，可以搞成_start</div><div>之后extern意义和C++类似，表示这个函数在别处，叫编译器以为他有就行&#8230;&#8230;</div><div></div><div>section .data &nbsp;表示数据段，后面是一些定义，以及初始化</div><div>注意这里定义的东西类型都像是指针一样，ctrlout，hw 实际上是地址&#8230;&#8230;</div><div>初始化必须搞的干净一点，有一次调了半天不对，就是因为一个64位int，前4位没有初始化成0&#8230;&#8230;</div><div></div><div>之后 section .text 表示代码段，这里调用C语言函数，网上说，64位汇编中，参数传递方式有了修改，大概是有4~5个寄存器专门保存参数，如果参数过多，再放入栈，rax存放栈中的参数个数&#8230;&#8230;我们想printf("%s","Hello World")，就要调用两个参数，于是，我们把第一个参数，字符串ctrlout的指针mov进rdi，hw mov进rsi，rax赋值为0 ，然后，调用&#8230;&#8230;</div><div>（实现时，需要手册自行查阅一下本机怎么搞）</div><div>函数的返回值在rax，于是return 0</div><div></div><div>然后 yasm -f elf64 XXX.asm</div><div>gcc -o XXX XXX.o</div><div>./XXX</div><div>一个崭新的hello world 出现了&#8230;&#8230;</div><div></div><div></div><div>Chapter3：汇编的一些简单指令：</div><div></div><div>由于这是速成教程，选取一部分指令&#8230;&#8230;要记住，CPU只能直接对寄存器进行运算&#8230;&#8230;</div><div>mov：相当于赋值， mov eax，b &nbsp;相当于eax = b；</div><div>注意：mov 后面的两个东西至少要有一个是寄存器&#8230;&#8230;</div><div>同时，和高级语言一样，不能搞什么 mov 10，eax&#8230;&#8230;</div><div></div><div>add：add eax，b 相当于eax+=b</div><div>sub：基本同上&#8230;&#8230;</div><div>mul || imul：前面是无符号的乘，后面是有符号的乘，默认被乘数在AX，于是指令形如：mul BX，如果有溢出，则高位溢出到DX，记得备份DX的东西&#8230;&#8230;</div><div>div &nbsp;|| &nbsp;idiv：前面是无符号整除，后面是有符号整除，默认被除数是DX（高16位）和AX（低16位），因此，除法之前记得把DX清零，否则数会不对&#8230;&#8230;</div><div>之后商在AX，余数在DX</div><div>指令形如：div BX</div><div></div><div>push/pop：每个程序都有栈，或者是在程序中定义堆栈段，或者使用默认栈</div><div>push eax，表示把eax放进栈里，pop ebx，表示取出栈顶，放在ebx中&#8230;&#8230;</div><div>push和pop异常重要，一个重要作用就是保护寄存器，譬如DX中有内容，但是现在要做乘法，没准会破坏DX（见上），于是，先PUSH DX，然后，乘法，然后POP DX，又好比你要调用一个函数，但是寄存器里有有用的信息，不保证这个函数不会破坏，于是，把所有寄存器先push进去，运行函数，然后再pop出来，这是常用技巧&#8230;&#8230;</div><div>另外也可以用来给函数传参数，传时倒序压入，用时顺序取出，栈，先进后出，你们懂的&#8230;&#8230;</div><div></div><div>Chapter4：if以及循环</div><div>首先我们要记得，被Dijkstra老爷子骂的一文不值的goto&#8230;&#8230;</div><div>jmp语法和C++里的goto基本一样</div><div></div><div>start：</div><div>XXX</div><div>jmp start</div><div></div><div>然后，汇编没有if then，但是有条件goto</div><div>有个语句叫做cmp</div><div>cmp X，Y （老原则，这两个得有一个寄存器&#8230;&#8230;如果和常数比较，常数必须在后面）</div><div>传说中具体实现是减法&#8230;&#8230;</div><div>这个的效果是可能改变若干标识位的值&#8230;&#8230;譬如：0标识，进位标识，溢出标识&#8230;&#8230;等等&#8230;&#8230;</div><div>然后，有若干指令</div><div>jl XX（l==less） 相当于 if (x&lt;y) goto XX; 下同</div><div>jg XX（g==greater）</div><div>jle XX（ne==less or equal）</div><div>jge XX（ge==greter or equal）</div><div>jnle XX（n==no-&gt;nle==g）</div><div>jnge XX（n==no-&gt;nge==l）</div><div></div><div>有了if then，各种运算，我们就能做出来&amp;&amp;,||的逻辑</div><div>有了if then，我们也能做出循环&#8230;&#8230;</div><div></div><div>很多的功能就有了&#8230;&#8230;</div><div></div><div>Chapter5：实战</div><div></div><div>看看</div><div></div><div>int main() {</div><div>&nbsp; &nbsp; int a,b,c;</div><div>&nbsp; &nbsp; input(a);</div><div>&nbsp; &nbsp; input(b);</div><div>&nbsp; &nbsp; if (a &lt; b) {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; c = a;</div><div>&nbsp; &nbsp; } else {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; c = b;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; print(c);</div><div>}</div><div></div><div>用汇编翻译出来啥样：</div><div></div><div>global main&nbsp;</div><div>extern printf&nbsp;</div><div>extern scanf&nbsp;</div><div></div><div>section .data&nbsp;</div><div><span style="white-space:pre">	</span>ctrlout &nbsp; db &nbsp; &nbsp; &nbsp;'%lld', 10, 0&nbsp;</div><div><span style="white-space:pre">	</span>ctrlin &nbsp; &nbsp;db &nbsp; &nbsp; &nbsp;'%lld', 0&nbsp;</div><div><span style="white-space:pre">	</span>_a db 0,0,0,0,0,0,0,0</div><div><span style="white-space:pre">	</span>_b db 0,0,0,0,0,0,0,0</div><div><span style="white-space:pre">	</span>_c db 0,0,0,0,0,0,0,0</div><div></div><div></div><div>section .text</div><div>main:</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rax, 0</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rdi, ctrlin</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rsi, _a</div><div><span style="white-space:pre">	</span>call<span style="white-space:pre">	</span>scanf</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rax, 0</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rdi, ctrlin</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rsi, _b</div><div><span style="white-space:pre">	</span>call<span style="white-space:pre">	</span>scanf</div><div><span style="white-space:pre">	</span>MOV rax, [_a]</div><div><span style="white-space:pre">	</span>CMP rax, [_b]</div><div><span style="white-space:pre">	</span>jl @0</div><div><span style="white-space:pre">	</span>jmp @2</div><div>@0:</div><div><span style="white-space:pre">	</span>MOV rax, [_a]</div><div><span style="white-space:pre">	</span>MOV [_c], rax</div><div><span style="white-space:pre">	</span>jmp @1</div><div>@2:</div><div><span style="white-space:pre">	</span>MOV rax, [_b]</div><div><span style="white-space:pre">	</span>MOV [_c], rax</div><div>@1:</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rax, 0</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rdi, ctrlout</div><div><span style="white-space:pre">	</span>mov<span style="white-space:pre">	</span>rsi, [_c]</div><div><span style="white-space:pre">	</span>call<span style="white-space:pre">	</span>printf</div><div><span style="white-space:pre">	</span>mov rax, 0</div><div>ret</div><div></div><div>Chapter6：其它</div><div>由于现实生活中，我需要写汇编时候实在是少，因此也没啥经验&#8230;&#8230;尽管借助手册，可以对付着写一点汇编代码，但是那是不科学的&#8230;&#8230;对我来讲，汇编告诉我们的一些底层的东西更有价值，可以在高级语言中有所体现：譬如一些表达式的写法，可以考虑写的更科学一些，譬如 c = a / b, q = a % b，记得写成 c = a / b; q = a - c * b，譬如灵活使用switch，等等&#8230;&#8230;</div></div><img src ="http://www.blogjava.net/sweetsc/aggbug/368903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2012-01-26 22:42 <a href="http://www.blogjava.net/sweetsc/archive/2012/01/26/368903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编译原理入门以及战大作业心得（1）lex简易入门</title><link>http://www.blogjava.net/sweetsc/archive/2012/01/16/368587.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Mon, 16 Jan 2012 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2012/01/16/368587.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/368587.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2012/01/16/368587.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/368587.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/368587.html</trackback:ping><description><![CDATA[终于考完了&#8230;&#8230;说好的日常技术Blog，很不幸没有实现&#8230;&#8230;不过现在慢慢补也是好的&#8230;&#8230;<br />这里介绍一下今年的几大神大作业之编译原理&#8230;&#8230;顺道在这里复习一下相关知识&#8230;&#8230;<br />编译器的工作分成6步（王老师考试不厚道，这次考的居然不是这6步是啥&#8230;&#8230;而是6步又分成哪两大部分&#8230;&#8230;不表&#8230;&#8230;），词法分析，语法分析，语义分析，中间代码生成，代码优化，代码生成&#8230;&#8230;<br />词法分析顾名思义是认出词来&#8230;&#8230;譬如关键字（if then else for int char等等），特殊符号（+-&#215;/等等），标识符（变量名，函数名）等，以及可能返回一些错误，譬如有一些奇怪的不认识的东西混进来了（中国字，没定义的标点符号等等&#8230;&#8230;），在处理标识符的时候，需要用一个符号表。因为标识符不能像关键字那样一概而论，要分清楚这是变量名，函数名，变量名的话还需要分清楚变量类型，int，char，double等，因此需要用符号表。所谓符号表，实际上数组就行了&#8230;&#8230;<br />Unix提供了一个工具：lex，可以实现用正则表达式来实现词法分析&#8230;&#8230;<br />这个东西版本多种多样，这里采用linux的flex，没有其它默认参数&#8230;&#8230;这样默认生成的是C代码<br />下面提供一个简单例子：简单辨认出标识符，数字，以及其他&#8230;&#8230;<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;%{<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;&lt;stdio.h&gt;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;yywrap();<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;%}<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0-9]<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[a-zA-Z_]<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;<br /><span style="color: #008080; ">10</span>&nbsp;%%<br /><span style="color: #008080; ">11</span>&nbsp;{D}+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;printf&nbsp;("It&nbsp;is&nbsp;a&nbsp;digit&nbsp;!&nbsp;\n");&nbsp;}<br /><span style="color: #008080; ">12</span>&nbsp;{L}({L}|{D})*&nbsp;&nbsp;&nbsp;{&nbsp;printf&nbsp;("It&nbsp;is&nbsp;a&nbsp;ID!&nbsp;\n");&nbsp;}<br /><span style="color: #008080; ">13</span>&nbsp;(.)*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;printf&nbsp;("I&nbsp;don't&nbsp;know!&nbsp;\n");&nbsp;}<br /><span style="color: #008080; ">14</span>&nbsp;%%<br /><span style="color: #008080; ">15</span>&nbsp;<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;yywrap()&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;&nbsp;}<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yylex();<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">20</span>&nbsp;}<br /><span style="color: #008080; ">21</span>&nbsp;</div><br />前面的 %{ %} ，就是按照C语言的规范写一些头文件，常量，函数定义&#8230;&#8230;<br />之后可以用正则表达式写一些自己的定义，譬如我这里定义了D表示数字，L表示字母<br />然后，两个 %% %% 中间，要写若干 正则表达式 { 干啥干啥 } 这样的格式，表示匹配上了这个，则做什么什么&#8230;&#8230; 这个会从上到下依次匹配&#8230;&#8230;<br />最后，就是C函数了&#8230;&#8230; yywrap()貌似表示是否还有输入，一直return 1就行&#8230;&#8230;<br />编译&#8230;&#8230;首先，以上代码要存成 XX.l 的lex格式文件&#8230;&#8230;<br />然后 lex XX.l ，会自动生成 lex.yy.c 文件&#8230;&#8230;<br />gcc之即可&#8230;&#8230;<br /><br />［待续&#8230;&#8230;］<img src ="http://www.blogjava.net/sweetsc/aggbug/368587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2012-01-16 13:20 <a href="http://www.blogjava.net/sweetsc/archive/2012/01/16/368587.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库（作业？）入门指北</title><link>http://www.blogjava.net/sweetsc/archive/2011/12/19/366664.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Sun, 18 Dec 2011 16:00:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2011/12/19/366664.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/366664.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2011/12/19/366664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/366664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/366664.html</trackback:ping><description><![CDATA[数据库是个好东西&#8230;&#8230;尽管我没什么兴趣&#8230;&#8230;但是干CS这行的，对数据库一窍不通还是说不过去的&#8230;&#8230;<br />
因此这学期还是选了数据库&#8230;&#8230;<br />
于是近日在和大作业斗争&#8230;&#8230;<br />
大作业是大概要写一个能操作数据库的软件，并完成一些功能&#8230;&#8230;<br />
这个软件的话，用各种手段都可以，听说弟兄们有ASP的，有MFC的，有VB的&#8230;&#8230;<br />
古人教育我们，LAMP&#8230;&#8230;又看到了ALP用过的一个神宝具，<a href="http://www.apachefriends.org/zh_cn/xampp.html">XAMPP</a>&#8230;&#8230;于是下载了XAMPP，打开虚拟机，一路next安装，之后运行xampp_ctrl，你们懂的<br />
<img src="http://www.blogjava.net/images/blogjava_net/sweetsc/2011-12-18-115629_1280x800_scrot.png" border="0" alt="" width="448" height="359" /><br />
于是，输入http://127.0.0.1，出来网页了&#8230;&#8230;<br />
然后，修改几个地方&#8230;&#8230;打开安装文件夹，网页都在那底下&#8230;&#8230;把原来的index.php改成admin.php，然后自己写一个index.php：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">1</span>&nbsp;&lt;?php<br />
<span style="color: #008080; ">2</span>&nbsp;<span style="color: #0000FF; ">echo</span>&nbsp;"ASS&nbsp;WE&nbsp;CAN!!!";<br />
<span style="color: #008080; ">3</span>&nbsp;?&gt;</div>
恩&#8230;&#8230;再输入http://127.0.0.1，奇迹出现了&#8230;&#8230;<br />
然后，咱们要解决一下IO问题&#8230;&#8230;至少先画个输入框啥的出来&#8230;&#8230;看看大概就懂了&#8230;&#8230;采取post的方法，把输入的量都作为一个数组，传递给reg.php处理&#8230;&#8230;<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">&gt;</span><br />
<span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><br />
<span style="color: #008080; ">&nbsp;3</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">form&nbsp;</span><span style="color: #FF0000; ">method</span><span style="color: #0000FF; ">=post&nbsp;</span><span style="color: #FF0000; ">action</span><span style="color: #0000FF; ">="reg.php"</span><span style="color: #0000FF; ">&gt;</span><br />
<span style="color: #008080; ">&nbsp;5</span>&nbsp;姓名<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">=text&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="name"</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">br</span><span style="color: #0000FF; ">&gt;</span><br />
<span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">=submit&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">=ok&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="提交"</span><span style="color: #0000FF; ">&gt;</span><br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">form</span><span style="color: #0000FF; ">&gt;</span><br />
<span style="color: #008080; ">&nbsp;8</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><br />
<span style="color: #008080; ">10</span>&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">&gt;</span></div>
有图有真相：<br />
<img src="http://www.blogjava.net/images/blogjava_net/sweetsc/2011-12-18-235300_1280x800_scrot.png" border="0" alt="" width="492" height="241" /><br />
<br />然后，reg.php，连接数据库，并添加一条：<br /><font color="#008080" size="2"><br /></font><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; ">&nbsp;1&nbsp;&lt;?php<span style="color: #008080; ">&nbsp;<br />&nbsp;2</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">链接数据库，并检查是否成功，输出调试信息</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">php的变量名前需加$，无须声明就可使用</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; "></span><br />
<span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #800080; ">$link</span>=<span style="color: #008080; ">mysql_connect</span>('localhost','root','');<br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">if</span>(!<span style="color: #800080; ">$link</span>)&nbsp;<span style="color: #0000FF; ">echo</span>&nbsp;"连接数据库失败";<br />
<span style="color: #008080; ">&nbsp;8</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">选择数据库</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008080; ">mysql_query</span>("use&nbsp;test",<span style="color: #800080; ">$link</span>);<br />
<span style="color: #008080; ">11</span>&nbsp;<br />
<span style="color: #008080; ">12</span>&nbsp;<span style="color: #008000; ">#生成命令，且输出</span><span style="color: #008000; ">调试信息&#8230;&#8230;网页传来的信息，会存在_post数组中，按照下标调用即可</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #008000; "></span><span style="color: #800080; ">$ctrl</span>&nbsp;=&nbsp;"insert&nbsp;into&nbsp;user(NAME)&nbsp;values('".&nbsp;<span style="color: #800080; ">$_POST</span>["name"]&nbsp;.&nbsp;"')";<br />
<span style="color: #008080; ">14</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">echo&nbsp;($ctrl);&nbsp;echo("&lt;/br&gt;");</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #008000; "></span><br />
<span style="color: #008080; ">16</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">向用户表中插入一条新的记录，并输出提示</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008080; ">mysql_query</span>(<span style="color: #800080; ">$ctrl</span>,<span style="color: #800080; ">$link</span>);<br />
<span style="color: #008080; ">18</span>&nbsp;<br />
<span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">调试信息&#8230;&#8230;</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #008000; "></span><span style="color: #800080; ">$rs</span>&nbsp;=&nbsp;<span style="color: #008080; ">MySQL_query</span>("select&nbsp;*&nbsp;from&nbsp;user");<br />
<span style="color: #008080; ">21</span>&nbsp;<span style="color: #800080; ">$cnt</span>&nbsp;=&nbsp;<span style="color: #008080; ">MySQL_query</span>("select&nbsp;count(*)&nbsp;from&nbsp;user");<br />
<span style="color: #008080; ">22</span>&nbsp;<span style="color: #800080; ">$cnt</span>&nbsp;=&nbsp;<span style="color: #008080; ">mysql_fetch_row</span>(<span style="color: #800080; ">$cnt</span>);<br />
<span style="color: #008080; ">23</span>&nbsp;<span style="color: #800080; ">$cnt</span>&nbsp;=&nbsp;<span style="color: #800080; ">$cnt</span>[0];<br />
<span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #800080; ">$i</span>&nbsp;=&nbsp;0;&nbsp;<span style="color: #800080; ">$i</span>&nbsp;&lt;&nbsp;<span style="color: #800080; ">$cnt</span>;&nbsp;<span style="color: #800080; ">$i</span>&nbsp;++)&nbsp;{<br />
<span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080; ">print_r</span>(<span style="color: #008080; ">mysql_fetch_row</span>(<span style="color: #800080; ">$rs</span>));<br />
<span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">echo</span>("&lt;/br&gt;");<br />
<span style="color: #008080; ">27</span>&nbsp;}<br />
<span style="color: #008080; ">28</span>&nbsp;<br />
<span style="color: #008080; ">29</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">关闭数据库链接</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008080; ">mysql_close</span>(<span style="color: #800080; ">$link</span>);<br />
<span style="color: #008080; ">31</span>&nbsp;<br />
<span style="color: #008080; ">32</span>&nbsp;?&gt;<br />
<span style="color: #008080; ">33</span>&nbsp;<br /><span style="color: #008080; ">34</span>&nbsp;&lt;h1&gt;&lt;a&nbsp;href="index.htm"&gt;回到首页&lt;/span&gt;&lt;/h1&gt;</div><br />至此，物理学的大厦已经建成，作业差不多可以写了&#8230;&#8230;&#8230;&#8230;<img src ="http://www.blogjava.net/sweetsc/aggbug/366664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2011-12-19 00:00 <a href="http://www.blogjava.net/sweetsc/archive/2011/12/19/366664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作笔记</title><link>http://www.blogjava.net/sweetsc/archive/2011/12/08/365830.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Wed, 07 Dec 2011 19:37:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2011/12/08/365830.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/365830.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2011/12/08/365830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/365830.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/365830.html</trackback:ping><description><![CDATA[近日，各方面工作，作业的压力都比较大&#8230;&#8230;相应的，收获也比较大&#8230;&#8230;<br />感触很多，都午夜党了&#8230;&#8230;想到哪里是哪里吧&#8230;&#8230;<br /><br /><div>折腾了这么一通，任务初步完成了，也把Pthread大概会用了，收获也很大&#8230;&#8230;<br />前半年，为了在ACM里面万一有点用，我开发了个java多线程模板&#8230;&#8230;（实际技术含量不高）<br />本次接受到的任务，刚开始也是上java做的，但是java效率不高，大家都懂的&#8230;&#8230;于是移植到C/C++，上pthread&#8230;&#8230;<br />与之前的任务相比，这次可不是&#8220;等所有线程的case跑完，主线程输出答案&#8221;，那么轻松&#8230;&#8230;java是个原生态支持多线程的语言，而且一个线程一个任务基本就没有冲突&#8230;&#8230;我这个 =_= &#8230;&#8230; 多线程得访问一个公共的hash表&#8230;&#8230; 而且，这个表memory里面还装不下&#8230;&#8230; 外加C/C++有些东西，多个线程一起用，可能就挂了&#8230;&#8230; =_= &#8230;&#8230; 于是 =_= &#8230;&#8230; 总之好歹还是磕磕绊绊的搞出了个可行的方案&#8230;&#8230;</div><br />程序设计语言太重要了&#8230;&#8230;这是一切的根本&#8230;&#8230;一个好的程序设计语言，或者说，更高一个层级来讲：工具，能够帮助你优雅的完成一些事情&#8230;&#8230;譬如，了解了Matlab，或者Octave，Scilab之后，一些程序就能搞的很漂亮很写意&#8230;&#8230;与高层次的东西相对的，C语言是根本。pthread、OS、编译，都是离不开的&#8230;&#8230;尽管不见得要自己动手干，底层的东西也要知道&#8230;&#8230;<br /><br />本来计划10分钟写完，但是现在写的似乎有点多了&#8230;&#8230;简单些吧&#8230;&#8230;直奔计划篇<br />先把大作业刷了&#8230;&#8230;把课都搞定了&#8230;&#8230;<br />增强VIM，或转型EMACS，培养用这种强力编辑器管理工程的能力<br />多看看C语言，涉猎一下Octave，Ruby，python等等&#8230;&#8230;<br />仔细想想今后干啥方向&#8230;&#8230;<br />偶尔一刷题&#8230;&#8230;<img src ="http://www.blogjava.net/sweetsc/aggbug/365830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2011-12-08 03:37 <a href="http://www.blogjava.net/sweetsc/archive/2011/12/08/365830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pthread学习笔记 III</title><link>http://www.blogjava.net/sweetsc/archive/2011/12/04/365525.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Sun, 04 Dec 2011 15:31:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2011/12/04/365525.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/365525.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2011/12/04/365525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/365525.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/365525.html</trackback:ping><description><![CDATA[有的时候，我们要处理线程之间的一些情况：在某些情况下，我们让线程进行或者停止&#8230;&#8230;<br />
这个时候，我们需要使用条件变量<br />
相关：<br />
定义一个条件变量：<br />
<div>
<div>pthread_cond_t cook_finish;</div>
</div>
<div><br />
相关函数：<br />
<div>
<div>pthread_cond_init(&amp;cook_finish,NULL);<br />
<div>
<div>
<div>pthread_cond_destroy(&amp;cook_finish);</div>
</div>
</div>
<div>初始化，老规矩，后面那个参数是属性<br />
删除，老规矩&#8230;&#8230;</div>
</div>
</div>
</div>
<div>
<div></div>
</div>
<div>
<div>
<div>
<div>
<div>pthread_cond_signal(&amp;cook_finish);<br />
让一个线程发出信号</div>
</div>
<div><br />
<div>
<div>
<div>pthread_cond_wait(&amp;cook_finish,&amp;lock);&nbsp;</div>
</div>
<div>
<div>
<div>让一个线程坐等条件变量的信号&#8230;&#8230;其中的lock还是那个互斥锁<br />
为什么要用个锁呢&#8230;&#8230;是为了避免一些悲剧情况的发生&#8230;&#8230;<br />
<br />
下面的代码有这么个问题：先是lock上，然后，坐等信号，然后解锁&#8230;&#8230; 其他的线程，也是lock上，发出信号，再解锁&#8230;&#8230;<br />
前文教育我们，互斥锁不能lock两次啊，这是为什么呢&#8230;&#8230;经查询，坐等信号这个函数的实现，大致是：解锁 -&gt; 坐等 -&gt; 锁上继续&#8230;&#8230;<br />
所以，大丈夫，大丈夫&#8230;&#8230;<br />以下代码构造了这么一个欢乐的场景：有个吃货，前来坐等吃东西，但是cooker需要工作3秒，才能产生出来食物&#8230;&#8230;<br />
<span style="font-size: 13px; background-color: #eeeeee; color: #008080; "><br />&nbsp; 1</span><span class="Apple-style-span" style="font-size: 13px; background-color: #eeeeee; ">&nbsp;</span><span class="Apple-style-span" style="font-size: 13px; background-color: #eeeeee; ">#include&nbsp;</span><span class="Apple-style-span" style="font-size: 13px; background-color: #eeeeee; ">&lt;</span><span class="Apple-style-span" style="font-size: 13px; background-color: #eeeeee; ">pthread.h</span><span class="Apple-style-span" style="font-size: 13px; background-color: #eeeeee; ">&gt;</span></div>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;&lt;stdio.h&gt;<br />
<span style="color: #008080; ">&nbsp;3</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;tot&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">&nbsp;5</span>&nbsp;pthread_mutex_t&nbsp;<span style="color: #0000FF; ">lock</span>;<br />
<span style="color: #008080; ">&nbsp;6</span>&nbsp;pthread_cond_t&nbsp;cook_finish;<br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;node_t&nbsp;{<br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;data;<br />
<span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;node_t*&nbsp;next;<br />
<span style="color: #008080; ">11</span>&nbsp;};<br />
<span style="color: #008080; ">12</span>&nbsp;<br />
<span style="color: #008080; ">13</span>&nbsp;typedef&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;node_t&nbsp;node;<br />
<span style="color: #008080; ">14</span>&nbsp;<br />
<span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*eater(<span style="color: #0000FF; ">void</span>&nbsp;*arg)&nbsp;{<br />
<span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("eater&nbsp;ready!!\n");<br />
<span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;*&nbsp;stat&nbsp;=&nbsp;(<span style="color: #0000FF; ">int</span>*)&nbsp;arg;<br />
<span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i;<br />
<span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_lock(&amp;<span style="color: #0000FF; ">lock</span>);<br />
<span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Waiting&nbsp;the&nbsp;cooker!!!\n");<br />
<span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_cond_wait(&amp;cook_finish,&amp;<span style="color: #0000FF; ">lock</span>);<br />
<span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_unlock(&amp;<span style="color: #0000FF; ">lock</span>);<br />
<span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;*stat;&nbsp;i++)&nbsp;{<br />
<span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;--;<br />
<span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("eater&nbsp;finish!!\n");<br />
<span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;NULL;<br />
<span style="color: #008080; ">28</span>&nbsp;}<br />
<span style="color: #008080; ">29</span>&nbsp;<br />
<span style="color: #008080; ">30</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*food(<span style="color: #0000FF; ">void</span>&nbsp;*arg)&nbsp;{<br />
<span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(3);<br />
<span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("cooker&nbsp;ready!!\n");<br />
<span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;*&nbsp;stat&nbsp;=&nbsp;(<span style="color: #0000FF; ">int</span>*)&nbsp;arg;<br />
<span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i;<br />
<span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_lock(&amp;<span style="color: #0000FF; ">lock</span>);<br />
<span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;*stat;&nbsp;i++)&nbsp;tot++;<br />
<span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_unlock(&amp;<span style="color: #0000FF; ">lock</span>);<br />
<span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("cook&nbsp;finish!!\n");<br />
<span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_cond_signal(&amp;cook_finish);<br />
<span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;NULL;<br />
<span style="color: #008080; ">41</span>&nbsp;}<br />
<span style="color: #008080; ">42</span>&nbsp;<br />
<span style="color: #008080; ">43</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br />
<span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;tmp&nbsp;=&nbsp;{123,&nbsp;NULL};<br />
<span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_t&nbsp;thr[2];<br />
<span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*exit_status;<br />
<span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_init(&amp;<span style="color: #0000FF; ">lock</span>,NULL);<br />
<span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_cond_init(&amp;cook_finish,NULL);<br />
<span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;num&nbsp;=&nbsp;1E8;<br />
<span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_create(&amp;thr[0],&nbsp;NULL,&nbsp;&amp;eater,&nbsp;&amp;num);<br />
<span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_create(&amp;thr[1],&nbsp;NULL,&nbsp;&amp;food,&nbsp;&amp;num);<br />
<span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_join(thr[0],&amp;exit_status);<br />
<span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_join(thr[1],&amp;exit_status);<br />
<span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",tot);<br />
<span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_destroy(&amp;<span style="color: #0000FF; ">lock</span>);<br />
<span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_cond_destroy(&amp;cook_finish);<br />
<span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />
<span style="color: #008080; ">58</span>&nbsp;}<br />
<span style="color: #008080; ">59</span>&nbsp;</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div><img src ="http://www.blogjava.net/sweetsc/aggbug/365525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2011-12-04 23:31 <a href="http://www.blogjava.net/sweetsc/archive/2011/12/04/365525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pthread学习笔记 II</title><link>http://www.blogjava.net/sweetsc/archive/2011/12/03/365439.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Fri, 02 Dec 2011 17:08:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2011/12/03/365439.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/365439.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2011/12/03/365439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/365439.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/365439.html</trackback:ping><description><![CDATA[根据老图某本书的教育：并行计算线程间的两个通讯模型，一个是传送消息，一个是共享空间&#8230;&#8230;<br />来解决这样一个多线程共享数据的问题：譬如跑一个计数的程序，N个线程都在产生答案，然后解要存在一个int中&#8230;&#8230;<br />如果不加处理，会有这么个Bug：现在内存里面数字是N，线程每次把它＋1的过程需要先读，把它复制到寄存器，＋1，再存回N去&#8230;&#8230;<br />如果多线程的话，很可能是：线程1读取N，线程2读取N，线程1 N += 1，线程2 N += 1，线程1存回去，线程2存回去&#8230;&#8230;<br />也就是说，数错了&#8230;&#8230;&#8230;&#8230;<br />怎么办呢&#8230;&#8230;我们要使用一个互斥锁：获得了锁的线程现在才能干活，没有的只能等待<br />定义一个锁：<br /><br /><div><div>pthread_mutex_t lock;</div></div><div></div>相关的函数：<br /><div><div>pthread_mutex_init(&amp;lock,NULL); 初始化，后一个是属性，默认可以是NULL</div></div><div><div>pthread_mutex_lock(&amp;lock); &nbsp; &nbsp; &nbsp;加锁<br /><div><div>pthread_mutex_unlock(&amp;lock); &nbsp; &nbsp;解开锁</div></div><div><div><div>pthread_mutex_destroy(&amp;lock); &nbsp; delete（？&#8230;&#8230;大概就这么理解吧&#8230;&#8230;）掉锁<br /><br />代码：</div></div><div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;&lt;pthread.h&gt;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;&lt;stdio.h&gt;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;pthread_mutex_t&nbsp;<span style="color: #0000FF; ">lock</span>;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;tot&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*entry_point(<span style="color: #0000FF; ">void</span>&nbsp;*arg)&nbsp;{<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;*&nbsp;stat&nbsp;=&nbsp;(<span style="color: #0000FF; ">int</span>*)&nbsp;arg;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i;<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;*stat;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_lock(&amp;<span style="color: #0000FF; ">lock</span>);<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;++;<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_unlock(&amp;<span style="color: #0000FF; ">lock</span>);<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;NULL;<br /><span style="color: #008080; ">16</span>&nbsp;}<br /><span style="color: #008080; ">17</span>&nbsp;<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_t&nbsp;thr[2];<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*exit_status;<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_init(&amp;<span style="color: #0000FF; ">lock</span>,NULL);<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;arr[2];&nbsp;arr[0]&nbsp;=&nbsp;10000;&nbsp;arr[1]&nbsp;=&nbsp;20000;<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_create(&amp;thr[0],&nbsp;NULL,&nbsp;&amp;entry_point,&nbsp;&amp;arr[0]);<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_create(&amp;thr[1],&nbsp;NULL,&nbsp;&amp;entry_point,&nbsp;&amp;arr[1]);<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_join(thr[0],&amp;exit_status);<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_join(thr[1],&amp;exit_status);<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",tot);<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_destroy(&amp;<span style="color: #0000FF; ">lock</span>);<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">30</span>&nbsp;}<br /><span style="color: #008080; ">31</span>&nbsp;</div></div></div></div></div><img src ="http://www.blogjava.net/sweetsc/aggbug/365439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2011-12-03 01:08 <a href="http://www.blogjava.net/sweetsc/archive/2011/12/03/365439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>define 学习体会</title><link>http://www.blogjava.net/sweetsc/archive/2011/12/02/365345.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Thu, 01 Dec 2011 17:59:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2011/12/02/365345.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/365345.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2011/12/02/365345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/365345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/365345.html</trackback:ping><description><![CDATA[最近，做OS大作业，编译大作业，和进行实验室工作，强烈认识到了自己对C语言的了解不多&#8230;&#8230;<br />
于是今天老图借了本书，学习一下&#8230;&#8230;<br />
来看一下我最头疼的define&#8230;&#8230;<br />
define的作用：<br />
一是直接定义一个东西&#8230;&#8230;类似标记<br />
譬如：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">1</span>&nbsp;#ifndef&nbsp;test<br />
<span style="color: #008080; ">2</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;test<br />
<span style="color: #008080; ">3</span>&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #008000; ">balabalabala<img src="http://www.blogjava.net/Images/dot.gif" alt="" />.<br />
</span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">6</span>&nbsp;<span style="color: #0000FF; ">#endif</span></div>
刘JX老师在大一C＋＋课上教育我们，写头文件一定要加上这么个东西&#8230;&#8230;为什么呢&#8230;&#8230;<br />
再提一下include的事情&#8230;&#8230; #include&lt;XXXX&gt;，实际上是直接把XXXX整个文件COPY了进来&#8230;&#8230;<br />
如果出现这样的情况：<br />
<div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">1</span>&nbsp;#include&nbsp;&lt;<span style="color: #0000FF; ">set</span>&gt;<br />
<span style="color: #008080; ">2</span>&nbsp;#include&nbsp;&lt;map&gt;</div>
我们知道，Cpp的 map 实际上是用 set 做的，map的头文件里肯定有一个 #include &lt;set&gt;，那么，相当于set这个文件在这段程序里面出现了两次&#8230;&#8230;<br />
如果没有ifndef这套的话，相当于将set中的代码重复贴了两次，就粗大事了&#8230;&#8230;<br />
代码第一段ifndef test 代表：如果没有define test，则执行下面的那段，先&nbsp;define test，然后balabala，最后endif，下次再看到这段代码的时候，ifndef test ，此时会发现test已经define过了，直接endif，中间balabala的代码不会重复两次&#8230;&#8230;<br />
<br />
二是直接定义一些&#8230;&#8230;怎么说呢，类似替换规则的东西&#8230;&#8230;<br /><br />
譬如：直接定义常量：<br />
<span style="font-size: 13px; background-color: #eeeeee; color: #008080; ">1</span><span class="Apple-style-span" style="font-size: 13px; background-color: #eeeeee; ">&nbsp;</span><span style="font-size: 13px; background-color: #eeeeee; color: #0000ff; ">#define</span><span class="Apple-style-span" style="font-size: 13px; background-color: #eeeeee; ">&nbsp;MAXN&nbsp;10000<br />
这个实际上就是直接在程序编译之前，将里面的MAXN都替换成10000<br />
预先定义一些常量，好处大家都懂：避免程序内部太多的&#8220;magic number&#8221;，增强可读性，也便于修改&#8230;&#8230;这里相当于直接替换，貌似C的数组，定义的时候不能用int做下标，const int也不行，只能通过这个方法，用立即数&#8230;&#8230;<br /><br />
譬如：给一些东西改个名字：<br />
</span>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->&nbsp;&nbsp;1&nbsp;#include&nbsp;&lt;stdio.h&gt;&nbsp;<br />
&nbsp;&nbsp;2&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;Q&nbsp;scanf&nbsp;<br />
&nbsp;&nbsp;3&nbsp;&nbsp;<br />
&nbsp;&nbsp;4&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{&nbsp;<br />
&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a;&nbsp;<br />
&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q("%d",&amp;a);&nbsp;<br />
&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",a);&nbsp;<br />
&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;&nbsp;<br />
&nbsp;&nbsp;9&nbsp;}&nbsp;</div>
<br />这里有一些玄机：<br />1：#似乎是因为没有转义？所以不能胡用&#8230;&#8230;<br />譬如：#define USEMATH #include &lt;math.h&gt; 是不能达到预期效果的&#8230;&#8230;<br />2：如果这一行太长，可以用\表示和下一行连起来&#8230;&#8230; 貌似这个'\'也没转义， #define BACKSLASH \ 也是不行的&#8230;&#8230;<br /><br />譬如：可以定义一些简单的函数：<br />#define max(a,b) ((a) &gt; (b) ? (a) : (b))<br />某种意义上这比template NB...<br />这样，int c ＝ max(a,b); 就自动替换成&nbsp;int c ＝((a) &gt; (b) ? (a) : (b)); 了<br />此处有一个技巧：有的时候，咱们需要用大括号来实现这个"函数"，但是，由define直接替换知道，这个替换出来，相当于{/*balabala*/};这样，语法是错的&#8230;&#8230;<br />于是怎么办呢&#8230;&#8230;咱们可以用 do {/*balabala*/} while(0) 这样的形式，绕开这个问题&#8230;&#8230; 在上次OS大作业上咱们都见到了&#8230;&#8230;<br />此处还有两个玄机：一是千万记得要加括号&#8230;&#8230;为什么呢&#8230;&#8230;<br />譬如：<br />#define mul(a,b) a * b<br />看着挺好，mul(1,2 + 3)就出事了&#8230;&#8230; 直接替换出来，是 1 * 2 + 3，就错了&#8230;&#8230;<br />正确方法是：#define mul(a,b) ((a) * (b))，万无一失&#8230;&#8230;<br />另一个玄机是避免++,--之类的，譬如 <br /><div>#define sqr(a) ((a) * (a))</div>sqr(a++)，如果sqr是真的函数的话，计算出没有问题&#8230;&#8230;但是define会忠实的给你替换成((a++) * (a++))&#8230;&#8230;怎么加的不重要，结果就不是你想的了&#8230;&#8230;<br /><br />最后有两个用法，一个是#，#会将你作为&#8220;函数&#8221;的&#8220;参数&#8221;传入的东西转化为字符串；一个是...，作用一看便知：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;&lt;stdio.h&gt;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;max(a,b)&nbsp;((a)&nbsp;&gt;&nbsp;(b)&nbsp;?&nbsp;(a)&nbsp;:&nbsp;(b))<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;PRINT(<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />)&nbsp;printf(__VA_ARGS__)<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;debug(x)&nbsp;do&nbsp;{&nbsp;\<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRINT(#x);&nbsp;&nbsp;\<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRINT("&nbsp;=&nbsp;%d\n",(x));&nbsp;\<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(0)<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,b;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&amp;a,&amp;b);<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug(a);<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug(b);<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug(a&nbsp;+&nbsp;b);<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug(max(a,b));<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">17</span>&nbsp;}</div><img src ="http://www.blogjava.net/sweetsc/aggbug/365345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2011-12-02 01:59 <a href="http://www.blogjava.net/sweetsc/archive/2011/12/02/365345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pthread学习笔记</title><link>http://www.blogjava.net/sweetsc/archive/2011/11/30/365156.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Tue, 29 Nov 2011 16:15:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2011/11/30/365156.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/365156.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2011/11/30/365156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/365156.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/365156.html</trackback:ping><description><![CDATA[&nbsp;<a href="/Files/sweetsc/Pthread-Tutorial-Peter.pdf">PDF教材传送门<br />
</a>
<br />
<div>
<div>前两天身心疲惫，现在得到了回复，于是乎工作还是要继续的&#8230;&#8230;</div>
<div>近日从ACM界退休下来之后，在做并行计算的东西&#8230;&#8230;</div>
<div>上周胡搞了一下，结果根本 TMD 搞不出来&#8230;&#8230;决定静下心来，阅读一下入门手册，指南之类的</div>
<div></div>
<div>原文的作者假设咱们在UNIX操作系统下，于是也没有提安装配置的事情&#8230;&#8230;</div>
<div>本人的 ArchLinux 也自带了pthread.h ，直接像stdio.h一样直接引用就好</div>
<div>编译时要加参数：-lpthread 或者 -pthread &#8230;&#8230;</div>
<div></div>
<div>两个函数：<br />
<br />
</div>
<div></div>
<div>pthread_create()：创建一个线程</div>
<div>第一个参数pthread_t *是类似线程ID一样的东西（经过查阅&lt;bits/pthreadtypes.h&gt;的定义，pthread_t就是long&#8230;&#8230;）</div>
<div>第二个参数是线程的属性，使用NULL表示默认属性，咱们现在使用NULL就好</div>
<div>第三个参数是让这个线程执行的函数，这个函数的定义是void *(*__start_routine) (void *)，也就是说，参数和返回值都是void＊，这是个很好的做法，我们可以用结构体指针，来传递和返回多个值</div>
<div>第四个参数，就是第三个函数的void*参数<br />
<br />
</div>
<div></div>
<div>pthread_join()：等待某个线程结束</div>
<div>第一个参数：pthread_t，线程ID；第二个参数：void*，用来保存该线程执行的函数返回值</div>
<div></div>
<div>这两个函数return 0表示正常，否则表示有Bug&#8230;&#8230;</div>
<div></div>
<div>咱们来看一下P5的习题：开10个线程，每个线程hello world五次，此时我自己发挥了一下，加了一个返回值：<br /><br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;&lt;pthread.h&gt;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;&lt;stdio.h&gt;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;THREADS&nbsp;=&nbsp;10;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*func(<span style="color: #0000FF; ">void</span>&nbsp;*arg)&nbsp;{<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;*<span style="color: #0000FF; ">in</span>&nbsp;=&nbsp;(<span style="color: #0000FF; ">int</span>*)&nbsp;arg;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;5;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Hello&nbsp;World&nbsp;(thread&nbsp;%d)\n",*<span style="color: #0000FF; ">in</span>);<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">in</span>;<br /><span style="color: #008080; ">13</span>&nbsp;}<br /><span style="color: #008080; ">14</span>&nbsp;<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_t&nbsp;thread_ID[THREADS];<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*exit_status;<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ID;<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;arg[THREADS];<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(ID&nbsp;=&nbsp;1;&nbsp;ID&nbsp;&lt;=&nbsp;THREADS;&nbsp;ID++)&nbsp;{<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg[ID]&nbsp;=&nbsp;ID;<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_create(&amp;thread_ID[ID],&nbsp;NULL,&nbsp;func,&nbsp;&amp;arg[ID]);<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(ID&nbsp;=&nbsp;1;&nbsp;ID&nbsp;&lt;=&nbsp;THREADS;&nbsp;ID++)&nbsp;{<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_join(thread_ID[ID],&nbsp;&amp;exit_status);<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Thread&nbsp;%d&nbsp;end&nbsp;!!\n",&nbsp;*(<span style="color: #0000FF; ">int</span>*)exit_status);<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">29</span>&nbsp;}</div><br />程序运行正常输出了若干hello world，并且正常退出<br />由输出可以看出，主线程输出的thread XX end ，和那10个线程的Hello world是穿插着运行的，并没有连续&#8230;&#8230;<br />习题还有一项，说：将这个程序弄到别的机器上看看效果，我猜是不是用在单核机器上，效果会不一样呢&#8230;&#8230;<br />打开虚拟机，运行结果表明，他是5条5条打的&#8230;&#8230;可以大概猜到，多核才能发挥多线程的作用啊&#8230;&#8230;<br />我试了试把pthread_join的部分注释了是什么效果&#8230;&#8230;结果运行到主程序结束return 0，其他线程也消失了&#8230;&#8230;<br /><br />2.2章讲了这么一件事情：返回值的时候，千万不能犯一个悲剧的错误：<br />在C/C++里我们知道，函数要返回一个数组，怎么办呢&#8230;&#8230;应该new出来一个并且返回，如果直接在函数内部&nbsp;int arr[1000]; return arr; 这样的话，返回的指针是指向栈空间的，而arr指针指向的那块内存在函数退出的时候直接就没有了&#8230;&#8230;<br />正确的方法是int *arr = new int[1000]; return arr; 这样数组是开在内存里的，在函数执行完毕之后，不会被回收<br />作者提醒我们，不是有个函数要返回void* 么&#8230;&#8230; 道理一样，不能在这个地方犯二&#8230;&#8230;<br /><br />今天先写到这里&#8230;&#8230;未完待续&#8230;&#8230;</div>
</div><img src ="http://www.blogjava.net/sweetsc/aggbug/365156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2011-11-30 00:15 <a href="http://www.blogjava.net/sweetsc/archive/2011/11/30/365156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>上网，读书，笔记 I</title><link>http://www.blogjava.net/sweetsc/archive/2011/10/09/360233.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Sat, 08 Oct 2011 16:20:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2011/10/09/360233.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/360233.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2011/10/09/360233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/360233.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/360233.html</trackback:ping><description><![CDATA[<div>最近要做点什么&#8230;&#8230;于是上网找找资料&#8230;&#8230;<br />From stanford CS：<br /><br />Panda (for Provenance and Data) is a new project whose goal is to address some limitations in existing provenance systems. <br />Panda，（来源和数据的缩写），是一个新项目，他的目标是：解决一些现有的来源系统（？！）的局限。<br /><div>this&nbsp;short paper describes our overall plans for Panda, including: <br />这个短Paper描述了我们对Panda大局的规划，包括<br />a model that fully integrates data-based and process-based provenance;<br />一个完全结合了基于数据和基于进程的来源模型（？！？！）<br />a set of built-in operators for exploiting provenance after it has been captured;<br />一个为了在捕获来源之后进行扩展的嵌入式操作符集合<br />an ad-hoc query language over provenance together with data;<br />一个来源 -&gt; 数据的点对点的操作语言<br />supporting the range from fine-grained to coarse-grained provenance;<br />支持范围从细纹理到粗纹理的来源<br />and addressing optimization problems involving eager versus lazy evaluation and data caching.<br />处理包括：需求和简单分析的平衡、数据缓冲等最优化问题<br /><br />好吧&#8230;&#8230;<br />研究研究什么叫 provenance systems：<br /><br />找了个文章，Layering in Provenance Systems（在这玩意里面分层？&#8230;&#8230;）<br /><br /><div>In digital systems, provenance is the record of the creation and modification of an object.<br />在数字系统中，来源是一个东西创造和修改的记录<br />Provenance provides answers to questions such as: <br />记录提供诸如此类问题的答案：<br />How does the ancestry of two objects differ?<br />为什么这两个东西的祖先不一样？<br />Are there source code files tainted by proprietary software?<br />有源代码被私有软件污染了（吗？&#8230;&#8230;）<br />How was this object created?<br />这个东西是怎么制造出来的<br /><br />似乎有点理解 来源 是个啥了&#8230;&#8230;<br /><br />正在理解 provenance systems 中&#8230;&#8230;</div></div></div><img src ="http://www.blogjava.net/sweetsc/aggbug/360233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2011-10-09 00:20 <a href="http://www.blogjava.net/sweetsc/archive/2011/10/09/360233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2011ACM北京网络预选赛 F Machine scheduling (BUPT 216)</title><link>http://www.blogjava.net/sweetsc/archive/2011/09/18/358932.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Sun, 18 Sep 2011 14:56:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2011/09/18/358932.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/358932.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2011/09/18/358932.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/358932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/358932.html</trackback:ping><description><![CDATA[这题比赛时候过得很纠结&#8230;&#8230;最后还是学长过的&#8230;&#8230;比赛时候脑子可能不够清楚，一直WA&#8230;&#8230;<br />
首先，这个题要分成两个部分解决：<br />
第一部分：从n个东西里面取出r个，每个间距至少为 k （1～K不行，1～K ＋ 1行）<br />
第二部分：将这r个东西分成至多m组，可以有空组<br />
第二部分貌似好久之前搞OI的时候干过&#8230;&#8230;贴过来：<br />
<table style="table-layout: fixed; width: 100%;">
     <tbody>
         <tr>
             <td>
             <div id="blog_text" class="cnt">N球放在M个盒子里，求共有多少种放法<br />
             <p>
             但是有3个不同的条件 ：N个球是否相同，M个盒子是否相同，是否允许有盒子空着</p>
             <p>
             <table class="MsoTableGrid" style="border-width: medium; border-style: none; border-color: -moz-use-text-color; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
                 <tbody>
                     <tr style="height: 13.8pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes">
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style="text-fit: 31.5pt; mso-text-fit-id: -1157813248"><span style=" letter-spacing: 1.95pt; mso-bidi-font-size: 10.5pt; mso-font-width: 75%; mso-font-kerning: 0pt">球和球</span></span><span style=" mso-bidi-font-size: 10.5pt"></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">盒和盒<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">空盒<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">情况数<span></span></span></p>
                         </td>
                     </tr>
                     <tr style="height: 13.2pt; mso-yfti-irow: 1">
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有空盒<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">m<sup>n</sup></span></p>
                         </td>
                     </tr>
                     <tr style="height: 13.8pt; mso-yfti-irow: 2">
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无空盒<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">M</span><span style=" mso-bidi-font-size: 10.5pt">！<span>s</span>（<span>n,m</span>）<span></span></span></p>
                         </td>
                     </tr>
                     <tr style="height: 13.2pt; mso-yfti-irow: 3">
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有空盒<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt; mso-ansi-">S(n,1)+s(n,2)+&#8230;+s(n,m),n&gt;=m</span></p>
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt; mso-ansi-">S(n,1)+s(n,2)+&#8230;+s(n,n),n&lt;=m</span></p>
                         </td>
                     </tr>
                     <tr style="height: 13.8pt; mso-yfti-irow: 4">
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无空盒<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">S(n,m)</span></p>
                         </td>
                     </tr>
                     <tr style="height: 13.2pt; mso-yfti-irow: 5">
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有空盒<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">C(n+m-1,n)</span></p>
                         </td>
                     </tr>
                     <tr style="height: 13.8pt; mso-yfti-irow: 6">
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无空盒<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.8pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">C(n-1,m-1)</span></p>
                         </td>
                     </tr>
                     <tr style="height: 13.2pt; mso-yfti-irow: 7">
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">有空盒<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.2pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">F(m,n)</span></p>
                         </td>
                     </tr>
                     <tr style="height: 14.45pt; mso-yfti-irow: 8; mso-yfti-lastrow: yes">
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 14.45pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 14.45pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无区别<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 14.45pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">无空盒<span></span></span></p>
                         </td>
                         <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 14.45pt; background-color: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top">
                         <p class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-line-height-alt: 0pt"><span style=" mso-bidi-font-size: 10.5pt">F(m,n-m)</span></p>
                         </td>
                     </tr>
                 </tbody>
             </table>
             </p>
             </div>
             </td>
         </tr>
     </tbody>
</table>
然后，其中的F(m,n)貌似是当时写过的一个DP，S(M,N)是第二类stirling数&#8230;&#8230;<br />递推公式：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;S(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;m)&nbsp;{<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(n&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;m&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: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;S(n&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;m)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;S(n&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;m&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">}</span></div>第一部分：可以看作这么一个生成函数的相关问题：由于每个东西之间都隔了&gt;=K－1的一段距离，因此一个可行解可以看作，长度为K，K + 1，K + 2的棍子r － 1个（我们认为每个棍子的头是我们取的点），拼接成长度为Len的一个大段，之后再堵上一个，就是一个Len ＋１的可行解&#8230;&#8230;<br />而r - 1根棍子，拼成长度为Len 的可行解数目，就是(X^K + X^(K + 1) + X^(K + 2) + .....) ^ (r - 1)，这个多项式，展开之后，X^Len项前面的系数&#8230;&#8230;<br />不过&#8230;&#8230;由于数据范围，直接搞是不成的&#8230;&#8230;<br />于是提取，变形：X^(K * (r - 1))&nbsp; * (1 + X + X^2 + X ^3 +....)^(r - 1)<br />然后再变形：X^(K * (r - 1))&nbsp; * (1/(1 - x))^(r - 1)&#8230;&#8230;<br /><a href="http://www.matrix67.com/blog/archives/120">然后参照Matrix67大神的日志，展开后面那项：<br /><div>1/(1-x)^n=1+C(n,1)x^1+C(n+1,2)x^2+C(n+2,3)x^3+...+C(n+k-1,k)x^k+...</div></a><div></div>我们知道，要求长度为len的可行数目，也就是要X^Len项前面的系数，然后，由于前面提取出来了一个K * (r - 1)，也就是去后面找len - K * (r - 1) 项的系数&#8230;&#8230;<br />也就是说，令pow = len - K * (r - 1)，答案就是C(r - 1 + pow - 1, pow)&#8230;&#8230;<br />不过这还没完，因为咱们要拼成的长度是len，而总的长度是N，需要乘上这个长度len的开头位置的可能数&#8230;&#8230;<br />另外还需要特殊处理：咱们在处理的时候，是先用r - 1个拼接成长度为Len的一个大段，再堵上最后一个&#8230;&#8230;当r == 1需要特判&#8230;&#8230;<br />代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstdio</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">#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 /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">typedef&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;Long;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;Long&nbsp;MOD&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1000000007</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">Long&nbsp;F[</span><span style="color: #000000; ">1010</span><span style="color: #000000; ">][</span><span style="color: #000000; ">1010</span><span style="color: #000000; ">];<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">Long&nbsp;C[</span><span style="color: #000000; ">2010</span><span style="color: #000000; ">][</span><span style="color: #000000; ">2010</span><span style="color: #000000; ">];<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">Long&nbsp;S(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;m)&nbsp;{<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(n&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;m&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: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;1LL;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(F[n][m]&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;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;F[n][m];<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;F[n][m]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(m&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;S(n&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;m)&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;MOD&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;S(n&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;m&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;MOD;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;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;</span><span style="color: #000000; ">2000</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;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;i;&nbsp;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(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;C[i][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 /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;C[i][j]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(C[i&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][j]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;C[i&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][j&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;MOD;<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,r,k,m;<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()&nbsp;{<br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;memset(F,</span><span style="color: #000000; ">0xff</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(F));<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;init();<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d%d%d%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">r,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">k,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m)&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;{<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(r&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;{printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,n);&nbsp;</span><span style="color: #0000FF; ">continue</span><span style="color: #000000; ">;}<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Long&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</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;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;r;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&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;(ans&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;S(r,i))&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;MOD;<br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Long&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;len&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;(r&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);&nbsp;len&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;n;&nbsp;len</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;left&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;n&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;len;<br /></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;pow&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;len&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;(r&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;r&nbsp;&gt;&nbsp;1&nbsp;!!</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(tmp&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;left&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;C[r&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;pow&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][pow])&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;MOD;<br /></span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;tmp&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;MOD;<br /></span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%lld\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br /></span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; ">&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 /></span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; ">}</span></div><img src ="http://www.blogjava.net/sweetsc/aggbug/358932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2011-09-18 22:56 <a href="http://www.blogjava.net/sweetsc/archive/2011/09/18/358932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>旁门左道第二章之障碍器</title><link>http://www.blogjava.net/sweetsc/archive/2011/04/06/347696.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Wed, 06 Apr 2011 04:36:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2011/04/06/347696.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/347696.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2011/04/06/347696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/347696.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/347696.html</trackback:ping><description><![CDATA[原文：
Java线程：新特征-障碍器，这是该作者的原创作品，允许转载，转载时请务必以超链接形式标明文章 <a href="http://lavasoft.blog.51cto.com/62575/222738" target="_blank" style="text-decoration:underline">原始出处</a> 、作者信息和本声明。否则他将追究法律责任&#8230;&#8230;<br />
<br />
Hmm&#8230;&#8230;好怕怕，转个日志都会被追究法律责任&#8230;&#8230;<br />
<br />
不过要感谢原文的兰州，在兰州的文章帮助下，今天突然发现了灵感，改造了改造兰州的代码&#8230;&#8230;<br />
在ACM中的作用，我觉得可以这样：<br />
1：对于单文件多case的题，开多线程，每个线程跑一个case，之后再调用收尾的任务输出<br />
2：对于单case且可以并行的情况，开若干线程处理之后，调用收尾函数來最后处理、输出<br />
<br />
以下是一个简单的求和代码，实际效果，在我的双核CPU上用时大概减少了一半<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.concurrent.BrokenBarrierException;<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.concurrent.CyclicBarrier;<br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Test&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">[]&nbsp;ans;<br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;run()&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">[</span><span style="color: #000000; ">4</span><span style="color: #000000; ">];<br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;now&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;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;</span><span style="color: #000000; ">400000000</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;now&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(now&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; ">9999997</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(now);<br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CyclicBarrier&nbsp;cb&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;CyclicBarrier(</span><span style="color: #000000; ">4</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;MainTask());<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;SubTask(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">100000000</span><span style="color: #000000; ">,cb).start();<br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;SubTask(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">100000000</span><span style="color: #000000; ">,</span><span style="color: #000000; ">200000000</span><span style="color: #000000; ">,cb).start();<br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;SubTask(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,</span><span style="color: #000000; ">200000000</span><span style="color: #000000; ">,</span><span style="color: #000000; ">300000000</span><span style="color: #000000; ">,cb).start();<br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;SubTask(</span><span style="color: #000000; ">3</span><span style="color: #000000; ">,</span><span style="color: #000000; ">300000000</span><span style="color: #000000; ">,</span><span style="color: #000000; ">400000000</span><span style="color: #000000; ">,cb).start();<br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Test().run();<br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;MainTask&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;Runnable&nbsp;{<br />
</span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;run()&nbsp;{<br />
</span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;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;</span><span style="color: #000000; ">4</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&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;(ans&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;Test.ans[i])&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">9999997</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ans);<br />
</span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;SubTask&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;Thread&nbsp;{<br />
</span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;pos;<br />
</span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;left;<br />
</span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;right;<br />
</span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;CyclicBarrier&nbsp;cb;<br />
</span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;mod&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">9999997</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SubTask(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;pos,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;left,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;right,CyclicBarrier&nbsp;cb)&nbsp;{<br />
</span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.pos&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pos;<br />
</span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.left&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;left;<br />
</span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.right&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;right;<br />
</span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.cb&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cb;<br />
</span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">48</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;run()&nbsp;{<br />
</span><span style="color: #008080; ">49</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">50</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;left;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;right;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">51</span>&nbsp;<span style="color: #000000; ">&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;(ans&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;mod;<br />
</span><span style="color: #008080; ">52</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">53</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test.ans[pos]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ans;<br />
</span><span style="color: #008080; ">54</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">55</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />
</span><span style="color: #008080; ">56</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cb.await();<br />
</span><span style="color: #008080; ">57</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080; ">58</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080; ">59</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(BrokenBarrierException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080; ">60</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080; ">61</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">62</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">63</span>&nbsp;<span style="color: #000000; ">}</span></div>
<img src ="http://www.blogjava.net/sweetsc/aggbug/347696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2011-04-06 12:36 <a href="http://www.blogjava.net/sweetsc/archive/2011/04/06/347696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>来个旁门左道……</title><link>http://www.blogjava.net/sweetsc/archive/2011/03/21/346699.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Mon, 21 Mar 2011 11:16:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2011/03/21/346699.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/346699.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2011/03/21/346699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/346699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/346699.html</trackback:ping><description><![CDATA[今天看了看java的并行&#8230;&#8230;写了一个实验品&#8230;&#8230;<br />
照书抄的，无须解释，看看估计就懂了&#8230;&#8230;<br />
但是把这个用在做题中会怎样呢？&#8230;&#8230; =_=<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.concurrent.Executors;<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.concurrent.ExecutorService;<br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;SumTask&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;Runnable&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;Left;<br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;Right;<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;ans;<br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;MOD&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">199999997</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SumTask(</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;L,</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;R)&nbsp;{<br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Left&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;L;<br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Right&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;R;<br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;run()&nbsp;{<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Left;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;Right;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&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;(ans&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;MOD;<br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ans);<br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;mul&nbsp;{<br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;MOD&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">199999997</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;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;</span><span style="color: #000000; ">400000000</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&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;(ans&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;MOD;<br />
</span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ans);<br />
</span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SumTask&nbsp;task1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;SumTask(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">100000000</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SumTask&nbsp;task2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;SumTask(</span><span style="color: #000000; ">100000000</span><span style="color: #000000; ">,</span><span style="color: #000000; ">200000000</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SumTask&nbsp;task3&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;SumTask(</span><span style="color: #000000; ">200000000</span><span style="color: #000000; ">,</span><span style="color: #000000; ">300000000</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SumTask&nbsp;task4&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;SumTask(</span><span style="color: #000000; ">300000000</span><span style="color: #000000; ">,</span><span style="color: #000000; ">400000000</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">4&nbsp;threads&nbsp;Start!!</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExecutorService&nbsp;runner&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Executors.newFixedThreadPool(</span><span style="color: #000000; ">4</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runner.execute(task1);<br />
</span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runner.execute(task2);<br />
</span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runner.execute(task3);<br />
</span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runner.execute(task4);<br />
</span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runner.shutdown();<br />
</span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">}</span></div>
<br />
<img src ="http://www.blogjava.net/sweetsc/aggbug/346699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2011-03-21 19:16 <a href="http://www.blogjava.net/sweetsc/archive/2011/03/21/346699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>贴个裸模板……求引玉……</title><link>http://www.blogjava.net/sweetsc/archive/2011/02/23/344972.html</link><dc:creator>[NKU]sweet</dc:creator><author>[NKU]sweet</author><pubDate>Wed, 23 Feb 2011 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/sweetsc/archive/2011/02/23/344972.html</guid><wfw:comment>http://www.blogjava.net/sweetsc/comments/344972.html</wfw:comment><comments>http://www.blogjava.net/sweetsc/archive/2011/02/23/344972.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/sweetsc/comments/commentRss/344972.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sweetsc/services/trackbacks/344972.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.</span><span style="color: #000000;">*</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.</span><span style="color: #000000;">*</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.math.</span><span style="color: #000000;">*</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Main {<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String&nbsp;args[])&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Prob().solve();<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Prob&nbsp;{<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;solve()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException&nbsp;{<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyReader&nbsp;in&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;MyReader();<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"><img src="http://www.blogjava.net/Images/dot.gif" alt="" />.</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;debug(Object<img src="http://www.blogjava.net/Images/dot.gif" alt="" />x)&nbsp;{<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Arrays.deepToString(x));<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;MyReader&nbsp;{<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;br&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedReader&nbsp;(<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;InputStreamReader&nbsp;(System.in));<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;StringTokenizer&nbsp;in;<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;next()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException&nbsp;{<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp; &nbsp; &nbsp; &nbsp; </span><font class="Apple-style-span" color="#0000ff">while</font><span style="color: #000000;">&nbsp;(in&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">in.hasMoreTokens())&nbsp;{<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;StringTokenizer(br.readLine());<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;in.nextToken();<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nextInt()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException&nbsp;{<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;Integer.parseInt(next());<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">}<br />
</span></div><img src ="http://www.blogjava.net/sweetsc/aggbug/344972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sweetsc/" target="_blank">[NKU]sweet</a> 2011-02-23 14:32 <a href="http://www.blogjava.net/sweetsc/archive/2011/02/23/344972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>