<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Moving on</title>
	<atom:link href="http://jonasyang.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jonasyang.wordpress.com</link>
	<description>Just another WordPress.com site</description>
	<lastBuildDate>Wed, 30 Mar 2011 09:39:41 +0000</lastBuildDate>
	<language>zh-cn</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='jonasyang.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Moving on</title>
		<link>http://jonasyang.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://jonasyang.wordpress.com/osd.xml" title="Moving on" />
	<atom:link rel='hub' href='http://jonasyang.wordpress.com/?pushpress=hub'/>
		<item>
		<title>ZOJ Problem 1017</title>
		<link>http://jonasyang.wordpress.com/2011/03/30/zoj-problem-1017/</link>
		<comments>http://jonasyang.wordpress.com/2011/03/30/zoj-problem-1017/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 09:36:36 +0000</pubDate>
		<dc:creator>jonasyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://jonasyang.wordpress.com/?p=43</guid>
		<description><![CDATA[Problem: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1017 这是什么题呢。个人觉得，是一道编程题，大概大很久之前想跳过这题。现在也明白原因了，它没有用很花哨的算法，也没有非常复杂的数学定理。但是它难在哪里呢？是的，是实现。在做出这题后，我觉得最难的是实现，而且它的设计还的确需要一些Design Pattern里的东东。 解决这个题的关键是重新建立坐标系，准确无误的标识出 1. 原来的六边形 2. 将要被放进来的三角形 3. 当前是否可以放入某一种类型的三角形 4. 更新当前的状态，在放入某一种三角形之后。 这样来建立坐标系。首先观察图1. 1019.1。 可以看到所有的三角形事实上只有两种，一种头向上，一种头向下。如果我们能用一种新的方式来标识任何一个最小的三角形，我的问题基本就解决了。观察图2， 1019.2。黑的三角形和白色的三角形都可以用这样的方式来标识。比如三角型 (0,0), (1,0), (0,1) 实际上就是四边形(0,0), (1,0),(1,1), (0,1)其中的一半，而另一个三角形(0,1), (1,1), (1,0) 是另一半。而我们可以通过任何一个三角形所在的四边形的左下点再加上一个朝向来表示是哪一个三角形。比如三角形 (3,4) ,(4,3),(4,4)就可以用(3,3, 0)表示，这个坐标表示。它是以(3,3)为顶点， 而且是头向下的那一个三角形来唯一表示。 而在实现的时候，直接将所有向上和向下的三角形放在两个数组里来记录hex[0]和hex[1]分别track头向下和头向上的三角形。参见图 1019.3 。 有了这种表示。所有的事情就会方便一些。接下来，只要实现一个对N长等边三角形进行拆解过程就可以了。如果判断一个N长的三角形是否可以放进当前的画布，只要看看它的所有子三角形是否已经被占用就可以了。实现中的Iterate就是这个作用。它可以实现一次对给定长度和朝向的三角形的子三角形进行一次遍历。而遍历时做什么，则是灵活的。可以是Seter，把所有的子三角形设置成1 (表示占用)。Cleaner，把所有的子三角形设置成0(表示空数)。以及Checker来检查是否可以所有的子三角形都未被占用。 有了所有的这些，实现就相对容易了。 1. 把所有的可能三角形排序，如果后面的长度是前面的某一个长度的N倍，则去掉。因为它可以用前的三角形表示。另外，如果三边形长度是len，而其中有某一个长度正好可以除尽，则返回YES。 2. 初始化三边形。比如一个长度为len的六边形，可以这样来表示。它可以是正方形（新的坐标系里的正方形） (0,0) 长度是len再减去三角形(0,0, 1, len)和 &#8230; <a href="http://jonasyang.wordpress.com/2011/03/30/zoj-problem-1017/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=43&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Problem: <a href="http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1017">http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1017</a></p>
<p>这是什么题呢。个人觉得，是一道编程题，大概大很久之前想跳过这题。现在也明白原因了，它没有用很花哨的算法，也没有非常复杂的数学定理。但是它难在哪里呢？是的，是实现。在做出这题后，我觉得最难的是实现，而且它的设计还的确需要一些Design Pattern里的东东。</p>
<p>解决这个题的关键是重新建立坐标系，准确无误的标识出 1. 原来的六边形 2. 将要被放进来的三角形 3. 当前是否可以放入某一种类型的三角形 4. 更新当前的状态，在放入某一种三角形之后。</p>
<p>这样来建立坐标系。首先观察图1. <a href="http://jonasyang.files.wordpress.com/2011/03/1019-1.pdf">1019.1</a>。 可以看到所有的三角形事实上只有两种，一种头向上，一种头向下。如果我们能用一种新的方式来标识任何一个最小的三角形，我的问题基本就解决了。观察图2， <a href="http://jonasyang.files.wordpress.com/2011/03/1019-2.pdf">1019.2</a>。黑的三角形和白色的三角形都可以用这样的方式来标识。比如三角型 (0,0), (1,0), (0,1) 实际上就是四边形(0,0), (1,0),(1,1), (0,1)其中的一半，而另一个三角形(0,1), (1,1), (1,0) 是另一半。而我们可以通过任何一个三角形所在的四边形的左下点再加上一个朝向来表示是哪一个三角形。比如三角形 (3,4) ,(4,3),(4,4)就可以用(3,3, 0)表示，这个坐标表示。它是以(3,3)为顶点， 而且是头向下的那一个三角形来唯一表示。</p>
<p>而在实现的时候，直接将所有向上和向下的三角形放在两个数组里来记录hex[0]和hex[1]分别track头向下和头向上的三角形。参见图 <a href="http://jonasyang.files.wordpress.com/2011/03/1019-3.pdf">1019.3</a> 。</p>
<p>有了这种表示。所有的事情就会方便一些。接下来，只要实现一个对N长等边三角形进行拆解过程就可以了。如果判断一个N长的三角形是否可以放进当前的画布，只要看看它的所有子三角形是否已经被占用就可以了。实现中的Iterate就是这个作用。它可以实现一次对给定长度和朝向的三角形的子三角形进行一次遍历。而遍历时做什么，则是灵活的。可以是Seter，把所有的子三角形设置成1 (表示占用)。Cleaner，把所有的子三角形设置成0(表示空数)。以及Checker来检查是否可以所有的子三角形都未被占用。</p>
<p>有了所有的这些，实现就相对容易了。</p>
<p>1. 把所有的可能三角形排序，如果后面的长度是前面的某一个长度的N倍，则去掉。因为它可以用前的三角形表示。另外，如果三边形长度是len，而其中有某一个长度正好可以除尽，则返回YES。</p>
<p>2. 初始化三边形。比如一个长度为len的六边形，可以这样来表示。它可以是正方形（新的坐标系里的正方形） (0,0) 长度是len再减去三角形(0,0, 1, len)和 (len, len, 0, len)，其中头两个数表示三角形所在的四边形左下顶点，第三个元素表示三角形头是否朝上(只有0，1), 第四个元素表示这个等边三角形的长度。比如(0,0, 1, len)实际表示三角形(0,0),(0,len),(len,0). 只要把这两个三角形表示成占用做为初始状态。那么实际上就表示了六边形。</p>
<p>3. 递归所有的可能解。这一步还是很关键的。参数很重要，实际上也决定了递归的顺序。我的基本想法是, 一层一层向上排，当前这一层先排向上的三角形，再排向下的三角形。给定一个坐标点，(x,y)以及另一个参数up，来表示当前排向上的三角形还是向下的三角形。如果up=true，那么，我假设所有的小于y的层都已经被放满了，同时，当前这一层中向上的三角形里小于x的也都被放满了。然后向x的正向找下一个空的位置。如果没有了，说明这一层都排满了，接着开始排当前这一层头向下的三角形。如果up=false，也是类似。停卡的条件是所有的层都被排满。直接返回true. 如果所有的可能都没有返回false.</p>
<p><pre class="brush: cpp;">
//=========================================================================
// ZOJ Problem No.1017
// Auther:  Jonas, Yang
// Mail  :  jonas.yang.jun@gmail.com
// Data  :  Mar.19.2011
// Performance Status:
// Running time | Memory | Language
// 0.26s		| 188K	 | C++
//=========================================================================

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;set&gt;
using namespace std;

class BTriangle
{
public:
    int len;
    vector&lt;int&gt; subTris;
	vector&lt;vector&lt;int&gt; &gt; hex[2];

	class Functor
	{
	public:
		vector&lt;vector&lt;int&gt; &gt; * hex;
        virtual bool operator()(int x, int y, bool up){ return false;};
	};

	class Checker: public Functor
	{
	public:

		Checker(vector&lt;vector&lt;int&gt; &gt; * _hex) { hex = _hex;};
		bool operator()(int x, int y, bool up)
		{
			return (*(hex + up))[x][y] == 0;
		}
	};

	class Cleaner: public Functor
	{
	public:
		Cleaner(vector&lt;vector&lt;int&gt; &gt; * _hex) { hex = _hex;}
		bool operator()(int x, int y, bool up)
		{
			(*(hex + up))[x][y] = 0;
			return true;
		}
	};

	class Seter: public Functor
	{
	public:
		Seter(vector&lt;vector&lt;int&gt; &gt; * _hex) { hex = _hex;}
		bool operator()(int x, int y, bool up)
		{
			(*(hex + up))[x][y] = 1;
			return true;
		}
	};

    Seter seter;
    Checker checker;
    Cleaner cleaner;

	bool Iterate(int x, int y, int length, bool bUp, Functor &amp; f)
	{
		for ( int i = 0; i &lt; length; ++i ) {
			int xStart = bUp ? x : x + i;
			int yStart = bUp ? y + i : y + length - i - 1;
			for ( int j = 0; j &lt; length - i; ++j ) {
				if ( bUp ) {
					if ( !f(xStart + j, yStart, true) ) {
						return false;
					}
					if ( j &lt; length - i - 1 &amp;&amp; !f(xStart + j, yStart, false)) {
						return false;
					}
				} else {
					if ( !f(xStart + j, yStart, false) ) {
						return false;
					}
					if ( j &gt; 0 &amp;&amp; !f(xStart + j, yStart, true)) {
						return false;
					}
				}
			}
		}
        return true;
	}
	BTriangle():seter(Seter(hex)), cleaner(Cleaner(hex)), checker(Checker(hex))
	{
		cin &gt;&gt; len;
		int N;
		cin &gt;&gt; N;
		subTris.resize(N);
		for ( int i = 0; i &lt; N; ++i ) {
			cin &gt;&gt; subTris[i];
		}

	}

	bool IsAcceptable(int x, int y, int length, bool bUp )
	{
        if ( x &lt; 0 || y &lt; 0 || x + length &gt; hex[0].size() || y + length &gt; hex[0].size() ) {
            return false;

        }

		return Iterate(x, y, length, bUp, checker);
	}

	bool FillHex(int x, int y, bool bUp)
	{
		if ( y &gt;= hex[1].size() ) {
			return true;
		}

        if ( bUp ) {
            while ( x &lt; hex[1].size()  ) {
                if ( !hex[1][x][y] ) {
                    break;
                }
                x ++;
            }

            if ( x == hex[0].size() ) {
                return FillHex(0, y, false);
            }

            for ( int i = 0; i &lt; subTris.size(); ++i ) {
                if ( IsAcceptable(x, y, subTris[i], true) ) {
                    Iterate(x, y, subTris[i], true, seter );
                    if ( FillHex(x + subTris[i], y, bUp) ) {
                        return true;
                    }
                    Iterate(x, y, subTris[i], true, cleaner );
                }
            }
        } else {
            while( x &lt; hex[0].size() ) {
                if ( !hex[0][x][y] ) {
                    break;
                }
                x ++;
            }

            if ( x == hex[0].size() ) {
                return FillHex(0, y + 1, true);
            }

            for ( int i = 0; i &lt; subTris.size(); ++i ) {
                if ( IsAcceptable(x - subTris[i] + 1, y, subTris[i], false) ) {
                    Iterate(x - subTris[i] + 1, y, subTris[i], false , seter);
                    if (FillHex(x + 1, y, false)) {
                        return true;
                    }
                    Iterate(x - subTris[i] + 1, y, subTris[i], false, cleaner);
                }
            }
        }

        return false;
	}

    bool IsDevided()
    {
        // Refine subTris
        sort(subTris.begin(), subTris.end());

        // Check whether there is dividable side in subTris. If so, return true.
        {
            int i = 0;
            for (; i &lt; subTris.size() &amp;&amp; subTris[i] &lt;= len; ++i ) {
                if (!(len % subTris[i])) {
                    return true;
                }
            }

            subTris.erase(subTris.begin() + i, subTris.end());
        }


        vector&lt;int&gt; subRefined;
        for ( int i = 0; i &lt; subTris.size(); ++i ) {
            int j = 0;
            for ( ; j &lt; i; ++j ) {
                if (!(subTris[i] % subTris[j])) {
                    break;
                }
            }

            if ( j == i ) {
                subRefined.push_back(subTris[i]);
            }
        }

        subTris = subRefined;

        {
            hex[0].resize(len * 2 , vector&lt;int&gt;(len * 2, 1));
            hex[1].resize(len * 2, vector&lt;int&gt;(len * 2, 1));

            Iterate(0, 0, len, true , cleaner );

            if ( FillHex(0, 0, true) ) {
                return true;
            }
        }

        {
            hex[0].resize(len * 2 , vector&lt;int&gt;(len * 2, 1));
            hex[1].resize(len * 2, vector&lt;int&gt;(len * 2, 1));

            Iterate(0, 0, len, true , cleaner );
            Iterate(0, 0, len, false , cleaner );

            if ( FillHex(0, 0, true) ) {
                return true;
            }
        }

        {
            hex[0].resize(len * 2 , vector&lt;int&gt;(len * 2, 1));
            hex[1].resize(len * 2, vector&lt;int&gt;(len * 2, 1));

            Iterate(0, 0, len, true , cleaner );
            Iterate(0, 0, len, false , cleaner );
            Iterate(0, len, len, true , cleaner );

            if ( FillHex(0, 0, true) ) {
                return true;
            }
        }

        {
            hex[0].resize(len * 2 , vector&lt;int&gt;(len * 2, 0));
            hex[1].resize(len * 2, vector&lt;int&gt;(len * 2, 0));

            Iterate(0, 0, len, true , seter );
            Iterate(len, len, len, false , seter );

            if ( FillHex(0, 0, true) ) {
                return true;
            }
        }

        return false;
    }
};

int main()
{
    int caseCnt = 0;
    cin &gt;&gt; caseCnt;
    while( caseCnt-- &gt; 0 ) {
        BTriangle bt;
        if (bt.IsDevided()) {
            cout &lt;&lt; &quot;YES&quot; &lt;&lt; endl;
        } else {
            cout &lt;&lt; &quot;NO&quot; &lt;&lt; endl;
        }
    }
    return 0;
}
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonasyang.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonasyang.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jonasyang.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jonasyang.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jonasyang.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jonasyang.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jonasyang.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jonasyang.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jonasyang.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jonasyang.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jonasyang.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jonasyang.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jonasyang.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jonasyang.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=43&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jonasyang.wordpress.com/2011/03/30/zoj-problem-1017/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/742d83873ba88997d1a4adc9e5185be0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jonasyang</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello world！</title>
		<link>http://jonasyang.wordpress.com/2011/03/09/hello-world/</link>
		<comments>http://jonasyang.wordpress.com/2011/03/09/hello-world/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 03:58:02 +0000</pubDate>
		<dc:creator>jonasyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://jonasyang.wordpress.com/?p=1</guid>
		<description><![CDATA[Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=1&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Welcome to <a href="https://wordpress.com/">WordPress.com</a>. This is your first post. Edit or delete it and start blogging!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonasyang.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonasyang.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jonasyang.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jonasyang.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jonasyang.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jonasyang.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jonasyang.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jonasyang.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jonasyang.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jonasyang.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jonasyang.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jonasyang.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jonasyang.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jonasyang.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=1&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jonasyang.wordpress.com/2011/03/09/hello-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/742d83873ba88997d1a4adc9e5185be0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jonasyang</media:title>
		</media:content>
	</item>
		<item>
		<title>ZOJ Problem 1009</title>
		<link>http://jonasyang.wordpress.com/2008/05/03/zoj-problem-1009/</link>
		<comments>http://jonasyang.wordpress.com/2008/05/03/zoj-problem-1009/#comments</comments>
		<pubDate>Fri, 02 May 2008 16:57:43 +0000</pubDate>
		<dc:creator>jonasyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://jonasyang.wordpress.com/2008/05/03/zoj-problem-1009</guid>
		<description><![CDATA[Problem source: http://acm.zju.edu.cn/show_problem.php?pid=1009. 这是一道排列变换的题目. 题目本身不容易理解. 有耐心的就仔细看看题目吧, 如果不把题目理解清楚, 一定会在解的过程中出问题. 我一开始认为题目中的sample有错, 结果我错了&#8230; 有人认为题目很easy. 当然, 如果只要求解出来的确不难. 有几点很有意思, 个人也觉得不太合理, 但事实如此, 虽然下面的方法很依赖测试数据, 但工程中我们要解决的问题往往不一定需要很通用, 所以也不一定是完全不可取的方法. 注意main() 函数中的string分配, 完全是硬试出来的, 用不断的submit以及返回的segmentation fault做为判断依据得到的数据. 1. 大多数人的做法是正向模拟排列复合最后的结果. 这样做有一个不好地方, 就是在最后得到复合的结果后, 还需要反向查找. 我用了另一种思路, 从一开始就维护一张反向表, 最后只需要直接用密文的字母做为index,即可得到结果. 2. 许多人把一次输入做为基本单位, 中间有很多重复计算. 可以这样理解, 每一次按扭时, 这时的状态对于所有的第i个字母来说都是一样的. 我的做法是把所有的密文全部输入, 然后维护一张反查表, &#8230; <a href="http://jonasyang.wordpress.com/2008/05/03/zoj-problem-1009/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=3&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!42122FAEC601BB98!318" class="bvMsg">
<p>Problem source: <a title="http://acm.zju.edu.cn/show_problem.php?pid=1009" href="http://acm.zju.edu.cn/show_problem.php?pid=1009">http://acm.zju.edu.cn/show_problem.php?pid=1009</a>.
<p>这是一道排列变换的题目. 题目本身不容易理解. 有耐心的就仔细看看题目吧, 如果不把题目理解清楚, 一定会在解的过程中出问题. 我一开始认为题目中的sample有错, 结果我错了&#8230;
<p>有人认为题目很easy. 当然, 如果只要求解出来的确不难. 有几点很有意思, 个人也觉得不太合理, 但事实如此, 虽然下面的方法很依赖测试数据, 但工程中我们要解决的问题往往不一定需要很通用, 所以也不一定是完全不可取的方法. 注意main() 函数中的string分配, 完全是硬试出来的, 用不断的submit以及返回的segmentation fault做为判断依据得到的数据.
<p>1. 大多数人的做法是正向模拟排列复合最后的结果. 这样做有一个不好地方, 就是在最后得到复合的结果后, 还需要反向查找. 我用了另一种思路, 从一开始就维护一张反向表, 最后只需要直接用密文的字母做为index,即可得到结果.
<p>2. 许多人把一次输入做为基本单位, 中间有很多重复计算. 可以这样理解, 每一次按扭时, 这时的状态对于所有的第i个字母来说都是一样的. 我的做法是把所有的密文全部输入, 然后维护一张反查表, 这样的好处是测试数据如果一个case的密文有多条, 且都不一样时, 效率是很高的. 当然如果数据量太大时现在的做法也是不合适的, 这是一种用空间换时间的方法.
<p>3. 优化求余操作. 求余会被转化为除法操做, 在算法中的核心函数rotate大量使用求余操作. 考虑用LookUpTable做加速. 时间从0.04s降到了0.02s. 这个哈稀表很简单, 但却有大用处. 另外就是要处理LookUpTable的大小, 越小越好&#8230;
<p>4. 关于permutation的一些推导, 有兴趣的自己研究一下吧&#8230; 可以用inverse permutation, permutation cycles和multiply permutation做关键字去google一把&#8230; 如果想深入看, 需要读Knuth的TACOP, I, section 1.3.3 和 III section 5.1. 可以帮你在无尽的绕圈圈中找到一些方向感&#8230; <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
<p>_________________________________________________________
<p>Performance status</p>
<table cellspacing="0" cellpadding="2" width="400" border="0">
<tbody>
<tr>
<td valign="top" width="133">Run time</td>
<td valign="top" width="133">Run memory</td>
<td valign="top" width="133">Language</td>
</tr>
<tr>
<td valign="top" width="133">00:00.02 sec</td>
<td valign="top" width="133">420K</td>
<td valign="top" width="133">C++</td>
</tr>
</tbody>
</table>
<p>___________________________________________________________
<p>#include &lt;stdio.h&gt;<br />#include &lt;memory.h&gt;
<p>int LookUpTable[26*3];<br />void inverse( int size, int src[] )<br />&#123;<br />    static int tmp[26],i;<br />    for ( i = 0; i &lt; size ; i++  ) &#123;<br />        tmp[src[i]] = i;<br />    &#125;<br />    memcpy(src,tmp,sizeof(int)*size);<br />&#125;
<p>void multiply( int size, int src0[], int src1[], int dst[] )<br />&#123;<br />    int i;<br />    for ( i = 0 ; i &lt; size; i++ ) &#123;<br />        dst[i] = src1[src0[i]];<br />    &#125;<br />&#125;
<p>void rotate( int size ,int rotor[], int offset[], int * start)<br />&#123;<br />    int idx,i;<br />    // Rotate r1^&#123;-1&#125;<br />    start[0] = (start[0] + size &#8211; 1) % size;<br />    idx = start[0];<br />    for ( i = 0 ; i &lt; size ; i++ ) &#123;<br />        rotor[i] = LookUpTable[i + offset[idx] + size ];<br />        idx = LookUpTable[idx + 1];<br />    &#125;<br />&#125;
<p>// Denote the rotor0, rotor1, rotor2 as r0, r1, r2.
<p>int main()<br />&#123;<br />    int size,i,j,cnt;<br />    int enigmaCnt = 1;<br />    int rotor[5][26];<br />    char string[26][1001];<br />    int flags[26];<br />    int listLen;<br />    int start,cur;<br />    int curChar;<br />    int starter[3];<br />    int offset[3][26];<br />    bool bChange;<br />    int counter0,counter1;<br />    int sizeSquare;<br />    int *pTable;<br />    do &#123;<br />        scanf( &quot;%d\n&quot;, &amp;size );<br />        if ( !size ) &#123;<br />            break;<br />        &#125;<br />        if ( enigmaCnt != 1 ) &#123;<br />            printf(&quot;\n&quot;);<br />        &#125;
<p>        pTable = LookUpTable;<br />        for ( j = 0 ; j&lt; 3 ; j++ ) &#123;<br />            gets(string[0]);<br />            for ( i = 0 ; i &lt; size ; i++ )&#123;<br />                rotor[j][i] =  string[0][i]-&#8217;A';<br />                offset[j][rotor[j][i]] = i &#8211; rotor[j][i]; <br />                // Init lookup table here.<br />                *pTable++ = i;<br />            &#125;<br />            // Let l = r0*r1*r2<br />            // l^&#123;-1&#125; = r2^&#123;-1&#125;*r1^&#123;-1&#125;*r0^&#123;-1&#125;<br />            inverse(size,rotor[j]);<br />        &#125;<br />        // r3 = r2^&#123;-1&#125;*r1^&#123;-1&#125;<br />        multiply(size,rotor[2],rotor[1],rotor[3]);
<p>        scanf( &quot;%d\n&quot;, &amp;cnt );<br />        printf( &quot;Enigma %d:\n&quot;,enigmaCnt++);<br />        for ( i = 0; i &lt; cnt &#8211; 1; i++ ) &#123;<br />            // Init input and linked list.<br />            gets(string[i]);<br />            flags[i] = i + 1;<br />        &#125;<br />        gets(string[i]);<br />        flags[i] = -1;<br />        listLen = cnt;
<p>        // Init stage.<br />        start = curChar = cur = 0;<br />        bChange = false;<br />        starter[0] = starter[1] = starter[2] = 0;<br />        sizeSquare = size*size;<br />        counter0 = counter1 = 0;
<p>        do&#123;<br />            int last = cur;<br />            int thisLen = listLen;<br />            cur = start;<br />            // Compute l^&#123;-1&#125; for current stage<br />            // r2 changed. <br />            if ( 0 == counter1 &amp;&amp; curChar ) &#123;<br />                bChange = true;<br />                rotate(size,rotor[2],offset[2],starter + 2);<br />            &#125;
<p>            // r1 changed.<br />            if ( 0 == counter0 &amp;&amp; curChar  ) &#123;<br />                bChange = true;<br />                rotate(size,rotor[1],offset[1],starter + 1);<br />            &#125;<br />            if ( bChange ) &#123;<br />                bChange = false;<br />                multiply(size,rotor[2],rotor[1],rotor[3]);<br />            &#125;
<p>            multiply(size,rotor[3],rotor[0],rotor[4]);
<p>            for ( i = 0 ; i &lt; thisLen; i ++ ) &#123;<br />                // When current string is processed, delete it from list.<br />                if ( &#8221; == string[cur][curChar] ) &#123;<br />                    if ( thisLen == 1 ) &#123;<br />                        listLen &#8211;;<br />                    &#125; else&#123;<br />                        if ( cur == start ) &#123;<br />                            start = flags[cur];<br />                        &#125; else if ( -1 == flags[cur] ) &#123;<br />                            flags[last] = -1;<br />                        &#125; else &#123;<br />                            flags[last] = flags[cur];<br />                        &#125;<br />                        listLen&#8211;;<br />                    &#125;<br />                &#125; else &#123;<br />                    string[cur][curChar] = <br />                        &#8216;a&#8217; + rotor[4][string[cur][curChar]-&#8217;A'];<br />                    last = cur;<br />                &#125;<br />                cur = flags[cur];<br />            &#125;<br />            // r0 always change.<br />            rotate(size,rotor[0],offset[0],starter);<br />            curChar++;<br />            if( counter0  == size &#8211; 1 )&#123;<br />                counter0 = 0;<br />            &#125; else&#123;<br />                counter0++;<br />            &#125;
<p>            if( counter1  == sizeSquare &#8211; 1 )&#123;<br />                counter1 = 0;<br />            &#125; else&#123;<br />                counter1++;<br />            &#125;
<p>        &#125;while( listLen );
<p>        for ( i = 0; i &lt; cnt; i++ ) &#123;<br />            printf(&quot;%s\n&quot;,string[i]);<br />        &#125;<br />    &#125; while (1);
<p>    return 0;<br />&#125;</p>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jonasyang.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jonasyang.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonasyang.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonasyang.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jonasyang.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jonasyang.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jonasyang.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jonasyang.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jonasyang.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jonasyang.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jonasyang.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jonasyang.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jonasyang.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jonasyang.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jonasyang.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jonasyang.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=3&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jonasyang.wordpress.com/2008/05/03/zoj-problem-1009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/742d83873ba88997d1a4adc9e5185be0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jonasyang</media:title>
		</media:content>
	</item>
		<item>
		<title>一部不错的电影</title>
		<link>http://jonasyang.wordpress.com/2007/12/02/%e4%b8%80%e9%83%a8%e4%b8%8d%e9%94%99%e7%9a%84%e7%94%b5%e5%bd%b1/</link>
		<comments>http://jonasyang.wordpress.com/2007/12/02/%e4%b8%80%e9%83%a8%e4%b8%8d%e9%94%99%e7%9a%84%e7%94%b5%e5%bd%b1/#comments</comments>
		<pubDate>Sun, 02 Dec 2007 15:28:15 +0000</pubDate>
		<dc:creator>jonasyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://jonasyang.wordpress.com/2007/12/02/%e4%b8%80%e9%83%a8%e4%b8%8d%e9%94%99%e7%9a%84%e7%94%b5%e5%bd%b1</guid>
		<description><![CDATA[我是一个挺爱看电影, 而且对于&#34;好&#34;电影的标准不高的人&#8230;  看了半天GPU GEMS 3中关于通用计算的部分, 今天看了一部电影,  在讲一个人爱上一个星星的故事&#8230;. 对于我这样的理科书呆子, 在缺少许多imagine 的能力下, 对于这样有样童话故事的电影, 还会觉得很有趣&#8230;. 不过我有一个很有文学气质的朋友, 现在看电影, 如果不是特别变态, 特别恶心, 或是特别恐怖的, 他是不会称之为&#34;好&#34;电影了&#8230;. 我感觉他是在考验我的心理承受能力, 我觉得受不了的, 他一定说好&#8230;. 你说这都是什么人啊&#8230;. 把自己的快乐建立在别人的痛苦上&#8230;.呵呵~~不过说来也怪, 我却很喜欢和他一起看电影&#8230; 回到正题, 这是一部英国气息很浓的电影, 传统, 绅士而且又通露着自己我感觉的高贵&#8230;  一个美丽的童话故事, 虽然现在的人都不好骗, 但如果能自圆其说, 大家还是会去欣赏一个&#34;人造&#34;的美丽的&#8230; 一个平凡的小子最后变成了一个他从来都没有想过成为的国王&#8230;  其中很多小细节还是结合的很好, 虽然结局过于完美, 不重要的人物有些死得过于随便, 但是的确情节上设计还是比较合理的&#8230; 而且其中一些搞笑的小插曲, 也让有些过于正面的主题得到一些中和&#8230; 说得太详细估计你就没有兴趣去看了&#8230;是吧? &#8230; <a href="http://jonasyang.wordpress.com/2007/12/02/%e4%b8%80%e9%83%a8%e4%b8%8d%e9%94%99%e7%9a%84%e7%94%b5%e5%bd%b1/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=4&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!42122FAEC601BB98!310" class="bvMsg">
<div>我是一个挺爱看电影, 而且对于&quot;好&quot;电影的标准不高的人&#8230;  看了半天GPU GEMS 3中关于通用计算的部分, 今天看了一部电影,  在讲一个人爱上一个星星的故事&#8230;.</div>
<div>对于我这样的理科书呆子, 在缺少许多imagine 的能力下, 对于这样有样童话故事的电影, 还会觉得很有趣&#8230;. 不过我有一个很有文学气质的朋友, 现在看电影, 如果不是特别变态, 特别恶心, 或是特别恐怖的, 他是不会称之为&quot;好&quot;电影了&#8230;. 我感觉他是在考验我的心理承受能力, 我觉得受不了的, 他一定说好&#8230;. 你说这都是什么人啊&#8230;. 把自己的快乐建立在别人的痛苦上&#8230;.呵呵~~不过说来也怪, 我却很喜欢和他一起看电影&#8230;</div>
<div>回到正题, 这是一部英国气息很浓的电影, 传统, 绅士而且又通露着自己我感觉的高贵&#8230;  一个美丽的童话故事, 虽然现在的人都不好骗, 但如果能自圆其说, 大家还是会去欣赏一个&quot;人造&quot;的美丽的&#8230; 一个平凡的小子最后变成了一个他从来都没有想过成为的国王&#8230;  其中很多小细节还是结合的很好, 虽然结局过于完美, 不重要的人物有些死得过于随便, 但是的确情节上设计还是比较合理的&#8230; 而且其中一些搞笑的小插曲, 也让有些过于正面的主题得到一些中和&#8230; 说得太详细估计你就没有兴趣去看了&#8230;是吧?</div>
<div>如果你有另一半, 快带着它去看吧&#8230;.呵呵~~</div>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jonasyang.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jonasyang.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonasyang.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonasyang.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jonasyang.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jonasyang.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jonasyang.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jonasyang.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jonasyang.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jonasyang.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jonasyang.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jonasyang.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jonasyang.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jonasyang.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jonasyang.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jonasyang.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=4&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jonasyang.wordpress.com/2007/12/02/%e4%b8%80%e9%83%a8%e4%b8%8d%e9%94%99%e7%9a%84%e7%94%b5%e5%bd%b1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/742d83873ba88997d1a4adc9e5185be0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jonasyang</media:title>
		</media:content>
	</item>
		<item>
		<title>若干以前的东东</title>
		<link>http://jonasyang.wordpress.com/2007/09/09/%e8%8b%a5%e5%b9%b2%e4%bb%a5%e5%89%8d%e7%9a%84%e4%b8%9c%e4%b8%9c/</link>
		<comments>http://jonasyang.wordpress.com/2007/09/09/%e8%8b%a5%e5%b9%b2%e4%bb%a5%e5%89%8d%e7%9a%84%e4%b8%9c%e4%b8%9c/#comments</comments>
		<pubDate>Sun, 09 Sep 2007 12:10:55 +0000</pubDate>
		<dc:creator>jonasyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://jonasyang.wordpress.com/2007/09/09/%e8%8b%a5%e5%b9%b2%e4%bb%a5%e5%89%8d%e7%9a%84%e4%b8%9c%e4%b8%9c</guid>
		<description><![CDATA[一直想把自己做过的东东和别人共享一把，最近在以前高中的数学老师的帮助下，找到了共享空间.　看到这篇文章的人里应该也有认识他的人，　他是王新敞老师，很庆幸自己能成为他的一名学生&#8230;　现在如果还有在上高中的弟弟妹妹的兄弟们，可以去王老师的主页，那里有大量的高中数学的资料&#8230; http://www.xjktyg.com/wxc 以下是一些共享的资料，以后有空再不段增加一些&#8230;.:) 研究生毕业论文 是关于三角B样条的绘制的东东，遗憾的是这个项目还没有完全做完，毕业之后就再也没有空多动它了&#8230;我把Latex源文件和生成的pdf都放上来了，以后要用Latex写论文的兄弟可以参考一把，里面用了不少Latex的高级功能，有了源文件改改就可以用了&#8230;.源文件打成了bzip2包，Linux下用&#34;tar -jxvf master-thesis.tar.bz2&#34;就可以了，在Windows下，用winrar就可以解了.　我写的时候用的Tex环境是: Windows: WinEdit + TexLive. 后来在Linux下也生成过，Linux: TexMaker + TexLive. 另一个就是生成的pdf文件了. Download1: [Latex src] Download2: [Pdf] TACOP Answer 凡是CS的人，应该没有不知道 &#34;Donald E. Knuth&#34;, 说起Knuth, 应该不知道＂The Art of Computer Programming＂的.　我听过一个朋友说用了一两个月就快读完第一卷了, 然后我问收获是什么? 回答是&#34;好像没有什么新的东西&#34;&#8230; 这里就不点名了&#8230;:) 不过如果真是这样草草看过, 还不如动手多做几道算法的题目&#8230; 我比较赞成尽量把里面所有的题目都做一下, 当然有些题目太BT, 先做个记号就好了&#8230;我看得很慢, 也是有空的时候看一点点, &#8230; <a href="http://jonasyang.wordpress.com/2007/09/09/%e8%8b%a5%e5%b9%b2%e4%bb%a5%e5%89%8d%e7%9a%84%e4%b8%9c%e4%b8%9c/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=5&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!42122FAEC601BB98!304" class="bvMsg">
<p>一直想把自己做过的东东和别人共享一把，最近在以前高中的数学老师的帮助下，找到了共享空间.　看到这篇文章的人里应该也有认识他的人，　他是<a href="http://www.xjktyg.com/wxc"><strong>王新敞</strong></a>老师，很庆幸自己能成为他的一名学生&#8230;　现在如果还有在上高中的弟弟妹妹的兄弟们，可以去王老师的主页，那里有大量的高中数学的资料&#8230;</p>
<p><a title="http://www.xjktyg.com/wxc" href="http://www.xjktyg.com/wxc">http://www.xjktyg.com/wxc</a></p>
<p>以下是一些共享的资料，以后有空再不段增加一些&#8230;.:)</p>
<ul>
<li>研究生毕业论文</li>
<ul>
<li>是关于三角B样条的绘制的东东，遗憾的是这个项目还没有完全做完，毕业之后就再也没有空多动它了&#8230;我把Latex源文件和生成的pdf都放上来了，以后要用Latex写论文的兄弟可以参考一把，里面用了不少Latex的高级功能，有了源文件改改就可以用了&#8230;.源文件打成了bzip2包，Linux下用&quot;tar -jxvf master-thesis.tar.bz2&quot;就可以了，在Windows下，用winrar就可以解了.　我写的时候用的Tex环境是: Windows: WinEdit + TexLive. 后来在Linux下也生成过，Linux: TexMaker + TexLive. 另一个就是生成的pdf文件了.</li>
<li>Download1: [<a href="http://218.84.9.233/wxc/YangJun/master-thesis.tar.bz2"><strong>Latex src</strong></a>]</li>
<li>Download2: [<a href="http://218.84.9.233/wxc/YangJun/thesis.pdf"><strong>Pdf</strong></a>]</li>
</ul>
<li>TACOP Answer</li>
<ul>
<li>凡是CS的人，应该没有不知道 &quot;<b><a href="http://www-cs-faculty.stanford.edu/~knuth/">Donald E. Knuth</a></b>&quot;, 说起Knuth, 应该不知道＂<u>T</u>he <u>A</u>rt <u>o</u>f <u>C</u>omputer <u>P</u>rogramming＂的.　我听过一个朋友说用了一两个月就快读完第一卷了, 然后我问收获是什么? 回答是&quot;好像没有什么新的东西&quot;&#8230; 这里就不点名了&#8230;:) 不过如果真是这样草草看过, 还不如动手多做几道算法的题目&#8230; 我比较赞成尽量把里面所有的题目都做一下, 当然有些题目太BT, 先做个记号就好了&#8230;我看得很慢, 也是有空的时候看一点点, 所以把题目和答案都顺便整理下来了&#8230;这是一个长期计划, 希望有一天能真的完成, 不过想想也应该是两三年的事情&#8230;</li>
<li>Download1: [<strong><a href="http://218.84.9.233/wxc/YangJun/answer-TACOP-VOL1.tar.bz2">Latex Src</a></strong>]</li>
<li>Download2: [<strong><a href="http://218.84.9.233/wxc/YangJun/answer.pdf">Pdf</a></strong>]</li>
</ul>
<li>Summary of Bezier Curve</li>
<ul>
<li>这是在CHG Graphics Team时写的一个报告, 关于Bezier曲线的内容&#8230; 有兴趣的兄弟们就看看吧&#8230;</li>
<li>Donwload1: [<strong><a href="http://218.84.9.233/wxc/YangJun/Summary_of_Bezier_Curve.pdf">Pdf</a></strong>]</li>
</ul>
</ul>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jonasyang.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jonasyang.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonasyang.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonasyang.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jonasyang.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jonasyang.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jonasyang.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jonasyang.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jonasyang.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jonasyang.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jonasyang.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jonasyang.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jonasyang.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jonasyang.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jonasyang.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jonasyang.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=5&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jonasyang.wordpress.com/2007/09/09/%e8%8b%a5%e5%b9%b2%e4%bb%a5%e5%89%8d%e7%9a%84%e4%b8%9c%e4%b8%9c/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/742d83873ba88997d1a4adc9e5185be0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jonasyang</media:title>
		</media:content>
	</item>
		<item>
		<title>任务管理器里的正弦波</title>
		<link>http://jonasyang.wordpress.com/2007/07/22/%e4%bb%bb%e5%8a%a1%e7%ae%a1%e7%90%86%e5%99%a8%e9%87%8c%e7%9a%84%e6%ad%a3%e5%bc%a6%e6%b3%a2/</link>
		<comments>http://jonasyang.wordpress.com/2007/07/22/%e4%bb%bb%e5%8a%a1%e7%ae%a1%e7%90%86%e5%99%a8%e9%87%8c%e7%9a%84%e6%ad%a3%e5%bc%a6%e6%b3%a2/#comments</comments>
		<pubDate>Sun, 22 Jul 2007 09:04:43 +0000</pubDate>
		<dc:creator>jonasyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://jonasyang.wordpress.com/2007/07/22/%e4%bb%bb%e5%8a%a1%e7%ae%a1%e7%90%86%e5%99%a8%e9%87%8c%e7%9a%84%e6%ad%a3%e5%bc%a6%e6%b3%a2</guid>
		<description><![CDATA[最近和一个MSRA的友人聊天时，说起了一个BT的问题。这位友人自然是程序设计的大牛，同样出对技术的热情，使我们很有共同语言。 前些时间，他聊起来一个很有意思的问题，我觉得很有意思，于是动手试了一把，原来是可以实现的。不过产生的结果没有到很理想的状态，有兴趣的可以继续动手。。。 题目是: 在Windows 的任务管理器里, 我们可以看到CPU占用率会被以固定的时间间隔采样下来,从而形成一条曲线, 那么在比较理想的情况下, 可以写一个程序让这条曲线变成方波, 或是更复杂的正弦波吗? BT的问题自然会吸引BT的人&#8230;于是我就实现了一把&#8230;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=6&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!42122FAEC601BB98!299" class="bvMsg">
<p>最近和一个MSRA的友人聊天时，说起了一个BT的问题。这位友人自然是程序设计的大牛，同样出对技术的热情，使我们很有共同语言。</p>
<p>前些时间，他聊起来一个很有意思的问题，我觉得很有意思，于是动手试了一把，原来是可以实现的。不过产生的结果没有到很理想的状态，有兴趣的可以继续动手。。。</p>
<p>题目是: 在Windows 的任务管理器里, 我们可以看到CPU占用率会被以固定的时间间隔采样下来,从而形成一条曲线, 那么在比较理想的情况下, 可以写一个程序让这条曲线变成方波, 或是更复杂的正弦波吗?</p>
<p>BT的问题自然会吸引BT的人&#8230;于是我就实现了一把&#8230;</p>
<p><a href="http://blu1.storage.msn.com/y1pM-ypMzvpjQs_VroAHGOgB33TLbUUuuLHTFl9V3NrbArntkJWkuRvgGZ44oyCHtZZJU-485ZnAeyzaOg9bnWal7Un1rjruM-b"><img src="http://blu1.storage.msn.com/y1pM-ypMzvpjQtMEt153MCY1d4KK89iV-ehF5npqPqeIGwdwBaq9siOAERiX8Vur-PrIEoUVoKa-SHpeqfggGkKYdukpFrvC79W" border="0" /></a></p>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jonasyang.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jonasyang.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonasyang.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonasyang.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jonasyang.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jonasyang.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jonasyang.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jonasyang.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jonasyang.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jonasyang.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jonasyang.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jonasyang.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jonasyang.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jonasyang.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jonasyang.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jonasyang.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=6&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jonasyang.wordpress.com/2007/07/22/%e4%bb%bb%e5%8a%a1%e7%ae%a1%e7%90%86%e5%99%a8%e9%87%8c%e7%9a%84%e6%ad%a3%e5%bc%a6%e6%b3%a2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/742d83873ba88997d1a4adc9e5185be0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jonasyang</media:title>
		</media:content>

		<media:content url="http://blu1.storage.msn.com/y1pM-ypMzvpjQtMEt153MCY1d4KK89iV-ehF5npqPqeIGwdwBaq9siOAERiX8Vur-PrIEoUVoKa-SHpeqfggGkKYdukpFrvC79W" medium="image" />
	</item>
		<item>
		<title>ZOJ_1008</title>
		<link>http://jonasyang.wordpress.com/2007/06/14/zoj_1008/</link>
		<comments>http://jonasyang.wordpress.com/2007/06/14/zoj_1008/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 11:30:19 +0000</pubDate>
		<dc:creator>jonasyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://jonasyang.wordpress.com/2007/06/14/zoj_1008</guid>
		<description><![CDATA[Gnome Tetravex Time limit: 10 Seconds   Memory limit: 32768K   Total Submit: 4852   Accepted Submit: 991   Hart is engaged in playing an interesting game, Gnome Tetravex, these days. In the game, at the beginning, the player is given n*n squares. Each &#8230; <a href="http://jonasyang.wordpress.com/2007/06/14/zoj_1008/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=7&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!42122FAEC601BB98!288" class="bvMsg">
<div align="center"><font color="blue" size="+2">Gnome Tetravex</font> </div>
<div>
<hr />
</div>
<div><font color="green">Time limit:</font> 10 Seconds   <font color="green">Memory limit: </font>32768K   <br /><font color="green">Total Submit:</font> 4852   <font color="green">Accepted Submit:</font> 991   </div>
<div>
<hr />
</div>
<p>Hart is engaged in playing an interesting game, Gnome Tetravex, these days. In the game, at the beginning, the player is given n*n squares. Each square is divided into four triangles marked four numbers (range from 0 to 9). In a square, the triangles are the left triangle, the top triangle, the right triangle and the bottom triangle. For example, Fig. 1 shows the initial state of 2*2 squares. </p>
<p align="center"><img src="http://acm.zju.edu.cn/showimg.php?pid=1008&amp;file=1008-1.jpg" /><br />Fig. 1 The initial state with 2*2 squares </p>
<p>The player is required to move the squares to the termination state. In the termination state, any two adjoining squares should make the adjacent triangle marked with the same number. Fig. 2 shows one of the termination states of the above example.</p>
<p align="center"><img src="http://acm.zju.edu.cn/showimg.php?pid=1008&amp;file=1008-2.jpg" /><br />Fig. 2 One termination state of the above example </p>
<p>It seems the game is not so hard. But indeed, Hart is not accomplished in the game. He can finish the easiest game successfully. When facing with a more complex game, he can find no way out.</p>
<p>One day, when Hart was playing a very complex game, he cried out, &quot;The computer is making a goose of me. It&#8217;s impossible to solve it.&quot; To such a poor player, the best way to help him is to tell him whether the game could be solved. If he is told the game is unsolvable, he needn&#8217;t waste so much time on it. </p>
<p><b>Input</b></p>
<p>The input file consists of several game cases. The first line of each game case contains one integer n, 0 &lt;= n &lt;= 5, indicating the size of the game.</p>
<p>The following n*n lines describe the marking number of these triangles. Each line consists of four integers, which in order represent the top triangle, the right triangle, the bottom triangle and the left triangle of one square.</p>
<p>After the last game case, the integer 0 indicates the termination of the input data set. </p>
<p><b>Output</b></p>
<p>You should make the decision whether the game case could be solved. For each game case, print the game number, a colon, and a white space, then display your judgment. If the game is solvable, print the string &quot;Possible&quot;. Otherwise, please print &quot;Impossible&quot; to indicate that there&#8217;s no way to solve the problem.</p>
<p>Print a blank line between each game case.</p>
<p>Note: Any unwanted blank lines or white spaces are unacceptable. </p>
<p><b>Sample Input</b></p>
<p>2<br />5 9 1 4<br />4 4 5 6<br />6 8 5 4<br />0 4 4 3<br />2<br />1 1 1 1<br />2 2 2 2<br />3 3 3 3<br />4 4 4 4<br />0 </p>
<p><b>Output for the Sample Input</b></p>
<p>Game 1: Possible </p>
<p>Game 2: Impossible</p>
<div>
<hr />
</div>
<div><font color="green" size="+1">Problem Source: </font><i>Asia 2001, Shanghai (Mainland China)</i></div>
<div><em></em> </div>
<div><strong>ANSWER:</strong></div>
<div>My solution is as following. This solution is derived from another solution</div>
<div> </div>
<div>
<pre>#include &lt;stdio.h&gt;
int g=0;         /*Game index*/
int n=0;         /*Puzzle size */
int q=0;         /* How many different types of squares */
int square[25][4];   /* Source squares */
int count[25];      /*Quantity of a certain type of squares */
int table[25];      /*Solution */
int n2;
int *pSquare;
	/*
	0 1
	2 3*/

	int Square2X2[4] = &#123;
		0x0, 0x11, 0x28, 0x39
	&#125;;

	/*
	0 1 2
	3 4 5
	6 7 8*/

	int Square3X3[9] = &#123;
		0x00, 0x11, 0x38,
		0x49, 0x21, 0x59,
		0x68, 0x79,	0x89
	&#125;;

	/*
	0   1   2   3
	4   5   6   7
	8   9   10  11
	12  13  14  15*/

	int Square4X4[16] = &#123;
		0x00, 0x11, 0x48, 0x59,
		0x21, 0x69, 0x31,	0x79,
		0x88, 0x99, 0xA9, 0xB9,
		0xC8, 0xD9, 0xE9, 0xF9
	&#125;;

	/*
	0	1	2	3	4
	5	6	7	8	9
	10	11	12	13	14
	15	16	17	18	19
	20	21	22	23	24*/

	int Square5X5[25] = &#123;
		0x00,	0x11,	0x58,	0x69,	0x21,
		0x79,	0x31,	0x89,	0x41,	0x99,
		0xA8,	0xB9,	0xC9,	0xD9,	0xE9,
		0xF8,	0x109,	0x119,	0x129,	0x139,
		0x148,	0x159,	0x169,	0x179,	0x189

	&#125;;

int place(int pos)
&#123;
	int i;
	int tpInt32,tpIdx;
	if(pos== n2)
		return 1;
	tpInt32 = pSquare[pos];
	tpIdx = tpInt32 &gt;&gt; 4;
	tpInt32 &amp;= 0xF;
	for(i=0; i&lt;q; i++) &#123;
		if (count[i] == 0) &#123;
			continue;
		&#125;
		if (tpInt32) &#123;
			if ( (tpInt32&amp;0x1) &amp;&amp; square[table[tpIdx-1]][1]!=square[i][3] ) &#123;
				continue;
			&#125;
			if ( (tpInt32&amp;0x2) &amp;&amp; square[table[tpIdx+n]][0]!=square[i][2]) &#123;
				continue;
			&#125;
			if ( (tpInt32&amp;0x4) &amp;&amp; square[table[tpIdx+1]][3]!=square[i][1]) &#123;
				continue;
			&#125;
			if ( (tpInt32&amp;0x8) &amp;&amp; square[table[tpIdx-n]][2]!=square[i][0]) &#123;
				continue;
			&#125;
		&#125;

		table[tpIdx]=i; 

		count[i]--; 

		if(place(pos+1)==1)
			return 1; 

		count[i]++;
	&#125; 

	return 0;
&#125; 

int main()
&#123;
	int i, j;
	int t, r, b, l;
	int *SquareTable[4] = &#123;Square2X2,Square3X3,Square4X4,Square5X5&#125;;
	g=0;
	q=0; 

	while(1)
	&#123;
		g++; 

		scanf(&quot;%d&quot;, &amp;n);
        n2 = n*n;

		if(n==0)
			break; 

		q=0; 

		for(i=0; i&lt;n2; i++)
		&#123;
			scanf(&quot;%d %d %d %d&quot;, &amp;t, &amp;r, &amp;b, &amp;l); 

			j=0; 

			while(j&lt;q)
			&#123;
				if(square[j][0]==t &amp;&amp; square[j][1]==r &amp;&amp; square[j][2]==b &amp;&amp; square[j][3]==l)
				&#123;
					count[j]++;
					break;
				&#125; 

				j++;
			&#125; 

			if(j==q)
			&#123;
				square[j][0]=t;
				square[j][1]=r;
				square[j][2]=b;
				square[j][3]=l; 

				count[j]=1; 

				q++;
			&#125;
		&#125;
		if ( n == 1 ) &#123;
			if(g&gt;1)&#123;
			printf(&quot;\n&quot;);
			&#125;
			printf(&quot;Game %d: Possible\n&quot;, g);
			continue;
		&#125;
		pSquare = SquareTable[n-2];
		if(g&gt;1)
			printf(&quot;\n&quot;);
		if(place(0)==1)
			printf(&quot;Game %d: Possible\n&quot;, g);
		else
			printf(&quot;Game %d: Impossible\n&quot;, g);
	&#125;
	return 0;
&#125; 

<strong>Running Time: 3.09s</strong></pre>
<pre><strong>Memory: 396K</strong></pre>
<pre><strong>Another answer from </strong></pre>
<pre>

/* source:  zju
1008 *//* describe: dfs   *//* status:  6.83s-_- *//* author:  sqc2936  */

#include &lt;stdio.h&gt;

int g=0;         //Game index int n=0;         //Puzzle size int
q=0;         //How many different types of squares int square[25][4];  
//Source squares int count[25];      //Quantity of a certain type of squares
int table[25];      //Solution

int place(int pos) &#123;    int i;

   if(pos==n*n)       return 1;

   for(i=0; i&lt;q; i++)    &#123;       if(count[i]==0)         
continue;

      if(pos%n!=0)          if(square[table[pos-1]][1]!=square[i][3])
            continue;

      if(pos/n!=0)          if(square[table[pos-n]][2]!=square[i][0])
            continue;

      table[pos]=i;

      count[i]--;

      if(place(pos+1)==1)          return 1;

      count[i]++;    &#125;

   return 0; &#125;

int main() &#123;    int i, j;    int t, r, b, l;   //Temporary
variables for input (top, right, bottom, left)

   g=0;    q=0;

   while(1)    &#123;       g++;

      scanf(&quot;%d&quot;, &amp;n);

      if(n==0)          break;

      q=0;

      for(i=0; i&lt;n*n; i++)       &#123;          scanf(&quot;%d %d %d %d&quot;,
&amp;t, &amp;r, &amp;b, &amp;l);

         j=0;

         while(j&lt;q)          &#123;             if(square[j][0]==t
&amp;&amp; square[j][1]==r &amp;&amp; square[j][2]==b &amp;&amp;
square[j][3]==l)             &#123;                count[j]++;
               break;             &#125;

            j++;          &#125;

         if(j==q)          &#123;             square[j][0]=t;
            square[j][1]=r;             square[j][2]=b;
            square[j][3]=l;

            count[j]=1;

            q++;          &#125;       &#125;

      if(g&gt;1)          printf(&quot;\n&quot;);       if(place(0)==1)
         printf(&quot;Game %d: Possible\n&quot;, g);       else         
printf(&quot;Game %d: Impossible\n&quot;, g);    &#125;

   return 0; &#125;

<strong>Running Time: 6.83s</strong>

<strong>Memory: 396K</strong>
</pre>
</div>
</p>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jonasyang.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jonasyang.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonasyang.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonasyang.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jonasyang.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jonasyang.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jonasyang.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jonasyang.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jonasyang.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jonasyang.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jonasyang.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jonasyang.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jonasyang.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jonasyang.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jonasyang.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jonasyang.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=7&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jonasyang.wordpress.com/2007/06/14/zoj_1008/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/742d83873ba88997d1a4adc9e5185be0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jonasyang</media:title>
		</media:content>

		<media:content url="http://acm.zju.edu.cn/showimg.php?pid=1008&#38;file=1008-1.jpg" medium="image" />

		<media:content url="http://acm.zju.edu.cn/showimg.php?pid=1008&#38;file=1008-2.jpg" medium="image" />
	</item>
		<item>
		<title>ZOJ_1007</title>
		<link>http://jonasyang.wordpress.com/2007/05/27/zoj_1007/</link>
		<comments>http://jonasyang.wordpress.com/2007/05/27/zoj_1007/#comments</comments>
		<pubDate>Sun, 27 May 2007 09:06:14 +0000</pubDate>
		<dc:creator>jonasyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://jonasyang.wordpress.com/2007/05/27/zoj_1007</guid>
		<description><![CDATA[Numerical Summation of a Series Time limit: 10 Seconds   Memory limit: 32768K   Special JudgeTotal Submit: 2276   Accepted Submit: 1086   Produce a table of the values of the series Equation 1 for the 2001 values of x, x= 0.000, 0.001, 0.002, &#8230; <a href="http://jonasyang.wordpress.com/2007/05/27/zoj_1007/">繼續閱讀 <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=8&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!42122FAEC601BB98!283" class="bvMsg"><font color="blue" size="+2">Numerical Summation of a Series</font> </p>
<div>
<hr />
</div>
<p><font color="green">Time limit:</font> 10 Seconds   <font color="green">Memory limit: </font>32768K   <font color="blue">Special Judge</font><br /><font color="green">Total Submit:</font> 2276   <font color="green">Accepted Submit:</font> 1086   </p>
<div>
<hr />
</div>
<p>Produce a table of the values of the series </p>
<p align="center"><img src="http://acm.zju.edu.cn/showimg.php?pid=1007&amp;file=1007-1.gif" /><br />Equation 1 </p>
<p>for the 2001 values of <i>x</i>, <i>x</i>= 0.000, 0.001, 0.002, &#8230;, 2.000. All entries of the table must have an absolute error less than 0.5e-12 (12 digits of precision). This problem is based on a problem from Hamming (1962), when mainframes were very slow by today&#8217;s microcomputer standards. </p>
<h4>Input</h4>
<p>This problem has no input. </p>
<h4>Output</h4>
<p>The output is to be formatted as two columns with the values of <i>x</i> and <font face="Symbol">y</font>(<i>x</i>) printed as in the C printf or the Pascal writeln.
<pre>printf(&quot;%5.3f %16.12f\n&quot;, x, psix )  writeln(x:5:3, psix:16:12)
</pre>
<p>As an example, here are 4 acceptable lines out of 2001.
<pre>0.000   1.644934066848
...
0.500   1.227411277760
...
1.000   1.000000000000
...
2.000   0.750000000000
</pre>
<p>The values of <i>x</i> should start at 0.000 and increase by 0.001 until the line with <i>x</i>=2.000 is output. </p>
<h4>Hint</h4>
<p>The problem with summing the sequence in equation 1 is that too many terms may be required to complete the summation in the given time. Additionally, if enough terms were to be summed, roundoff would render any typical double precision computation useless for the desired precision. </p>
<p>To improve the convergence of the summation process note that</p>
<p align="center"> <img src="http://acm.zju.edu.cn/showimg.php?pid=1007&amp;file=1007-2.gif" /><br />Equation 2 </p>
<p>which implies <font face="Symbol">y</font>(1)=1.0. One can then produce a series for <font face="Symbol">y</font>(<i>x</i>) &#8211; <font face="Symbol">y</font>(1) which converges faster than the original series. This series not only converges much faster, it also reduces roundoff loss. </p>
<p>This process of finding a faster converging series may be repeated to produce sequences which converge more and more rapidly than the previous ones. </p>
<p align="center">The following inequality is helpful in determining how may items are required in summing the series above. <img src="http://acm.zju.edu.cn/showimg.php?pid=1007&amp;file=1007-3.gif" /><br />Equation 3 </p>
<div>
<hr />
</div>
<div><font color="green" size="+1">Problem Source: </font><i>Zhejiang University Local Contest 2001</i></div>
<div><em></em> </div>
<div><strong>ANSWER:</strong></div>
<div>My solution is as following:</div>
<div> </div>
<div>#include &lt;math.h&gt;</div>
<div>int main()<br />&#123;<br />    double fX,fCurrent,fSum,fK,fN,fX1;<br />    int i;<br />    unsigned int start,end;</div>
<div>    fX = -0.001;<br />    for (i = 0; i &lt;= 2000 ; i++) <br />    &#123;<br />        fX += 0.0010;<br />        fSum = 0.0;<br />        fX1 = (3.0 &#8211; fX)*(2.0 &#8211; fX)*(1.0 &#8211; fX);<br />        if(fX1&gt;0.0)<br />            fN = sqrt((double)sqrt((double)(fX1/4.0)))*1000.0;<br />        else<br />            fN = sqrt((double)sqrt((double)(-fX1/4.0)))*1000.0;<br />        for (fK= 1.0;fK&lt;=fN * 1.5 ;fK += 1.0)<br />        &#123;<br />            fCurrent = (double)1.0/(fK*(fK + 1.0)*(fK + 2.0)*(fK + 3.0)*(fK+fX));<br />            fSum += fCurrent;<br />        &#125;<br />        fSum = (fSum*fX1) + (49.0 &#8211; 15.0*fX + 2*fX*fX)/36.0;<br />        printf(&quot;%5.3f %.12f\n&quot;, fX, fSum);<br />    &#125;<br />    scanf(&quot;%d&quot;,&amp;end);<br />    return 0;<br />&#125;</div>
<div><strong>Running Time: 0.07S</strong></div>
<div><strong>Memory: 396K</strong></div>
<div><strong></strong> </div>
<div><strong>Another answer from &quot;</strong><span><a title="Flying Dream" href="http://szbeginner.spaces.live.com/default.aspx?_c02_owner=1">Flying Dream</a></span><strong>&quot;</strong><span> </span></div>
<div>
<div>
<div>
<div align="left"><font face="Courier New, Courier, Monospace">#define N       10000       /* number of terms to sum */</font></div>
<div align="left"><font face="Courier New, Courier, Monospace">int main()<br />&#123;<br />    double x;<br />    double sum;         /* used for computation summations */<br />    double psix, psix1; /* psix(x) and psix(1) */<br />    double dx;          /* value of the first accelerated series at x */ <br />    double d2;          /* value of the first accelerated series at 2 */<br />    double ddx;         /* value of the second accelerates series at x */<br />    int i, k;<br />    double kd;<br />    <br />    psix1 = 1;<br />    d2 = 0.25;<br />    <br />    for (i = 0; i &lt;= 2000 ; i++) <br />    &#123;<br />        x = i*0.001;<br />        sum = 0.0;<br />                <br />        for (k = 1; k &lt;= N; k++)<br />        &#123;<br />            kd = k;<br />            sum += 1.0/(kd*(kd+1)*(kd+2)*(kd+x));<br />        &#125;<br />        <br />        ddx = (2.0-x)*sum;<br />        <br />        /* get the value of the first accelerated series */<br />        dx = (1.0-x)*(d2+ddx);<br />        <br />        /* get value of original series */<br />        psix = psix1 + dx;<br />                <br />        printf(&quot;%5.3f %.12f\n&quot;, x, psix);<br />    &#125;<br />    <br />    return 0;<br />&#125;<br /></font><strong><font face="Verdana, Geneva, Arial, Sans-serif">Running Time: 0.61S</font></strong></div>
<div align="left"><strong><font face="Verdana, Geneva, Arial, Sans-serif">Memory: 392K</font></strong><font face="Geneva, Arial, Sans-serif"><strong></strong></font></div>
<div align="left"> </div>
</div>
</div>
</div>
</p>
</p>
</p>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jonasyang.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jonasyang.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonasyang.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonasyang.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jonasyang.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jonasyang.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jonasyang.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jonasyang.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jonasyang.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jonasyang.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jonasyang.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jonasyang.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jonasyang.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jonasyang.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jonasyang.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jonasyang.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=8&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jonasyang.wordpress.com/2007/05/27/zoj_1007/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/742d83873ba88997d1a4adc9e5185be0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jonasyang</media:title>
		</media:content>

		<media:content url="http://acm.zju.edu.cn/showimg.php?pid=1007&#38;file=1007-1.gif" medium="image" />

		<media:content url="http://acm.zju.edu.cn/showimg.php?pid=1007&#38;file=1007-2.gif" medium="image" />

		<media:content url="http://acm.zju.edu.cn/showimg.php?pid=1007&#38;file=1007-3.gif" medium="image" />
	</item>
		<item>
		<title>周未的懒觉</title>
		<link>http://jonasyang.wordpress.com/2007/05/19/%e5%91%a8%e6%9c%aa%e7%9a%84%e6%87%92%e8%a7%89/</link>
		<comments>http://jonasyang.wordpress.com/2007/05/19/%e5%91%a8%e6%9c%aa%e7%9a%84%e6%87%92%e8%a7%89/#comments</comments>
		<pubDate>Sat, 19 May 2007 10:26:08 +0000</pubDate>
		<dc:creator>jonasyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://jonasyang.wordpress.com/2007/05/19/%e5%91%a8%e6%9c%aa%e7%9a%84%e6%87%92%e8%a7%89</guid>
		<description><![CDATA[在上大学时代，每天睡到早上十一二点并不是件很少有的事，对此，也并没有特别的感觉.　 昨天下班便约好了这个死党一起打牌，刚到她家我便有点撑不住了，躺在沙发上差点睡着，昨天牌运特别差，所以三次惩罚都是我自己&#8230;虽然在大学时代，我便是以每次和大家聚的时候，自己乌龙出名，但是这次也是有些让我郁闷&#8230;但过程是愉快的，让我又一次见识到女人可怕起来，那是相当的可怕&#8230;她们会用你平时对她们的方式好几倍对付你，看来平时要积点口德了&#8230;还有，对VIA的女人要特别小心&#8230;哈哈哈. 当我三连败之后，我也对自己失去了信心，现在的信心没有以前那么坚强了，想当初，只要有一个目标，就会一直向前冲，什么都不怕&#8230;大概是老了吧&#8230;也对，本科的同学现在都在读博士了&#8230;.十年前的现在，是初三的下学期，那时的我是人生最叛逆的时期，相信爸妈一定在那时受了不少气&#8230;在十一点之后，决定回家了&#8230;打的回家，打开电脑，准备看十二点重播的康熙来了&#8230;我是小S的忠实FANS&#8230;她带给我的开心的确不少&#8230;躺在床上准备先小休息一下&#8230;但是醒来的时候已经是半夜了&#8230;这才明白身体的疲惫&#8230;关灯，关电脑，睡觉&#8230;早上十二点才从温暖的被窝里爬出来&#8230;听着歌，享受着慢慢，静静，轻轻，懒懒，暖暖的感觉&#8230;.听到了＂我和春天有个约会＂，一首先老的歌&#8230;想起了一个人..不知远在几千公里之外还好吗，是否正在努力实现着自己的梦想&#8230;而我的梦想呢，才发现，梦想被我弄丢了&#8230;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=9&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!42122FAEC601BB98!280" class="bvMsg">
<div>在上大学时代，每天睡到早上十一二点并不是件很少有的事，对此，也并没有特别的感觉.　</div>
<div>昨天下班便约好了这个死党一起打牌，刚到她家我便有点撑不住了，躺在沙发上差点睡着，昨天牌运特别差，所以三次惩罚都是我自己&#8230;虽然在大学时代，我便是以每次和大家聚的时候，自己乌龙出名，但是这次也是有些让我郁闷&#8230;但过程是愉快的，让我又一次见识到女人可怕起来，那是相当的可怕&#8230;她们会用你平时对她们的方式好几倍对付你，看来平时要积点口德了&#8230;还有，对VIA的女人要特别小心&#8230;哈哈哈.</div>
<div>当我三连败之后，我也对自己失去了信心，现在的信心没有以前那么坚强了，想当初，只要有一个目标，就会一直向前冲，什么都不怕&#8230;大概是老了吧&#8230;也对，本科的同学现在都在读博士了&#8230;.十年前的现在，是初三的下学期，那时的我是人生最叛逆的时期，相信爸妈一定在那时受了不少气&#8230;在十一点之后，决定回家了&#8230;打的回家，打开电脑，准备看十二点重播的康熙来了&#8230;我是小S的忠实FANS&#8230;她带给我的开心的确不少&#8230;躺在床上准备先小休息一下&#8230;但是醒来的时候已经是半夜了&#8230;这才明白身体的疲惫&#8230;关灯，关电脑，睡觉&#8230;早上十二点才从温暖的被窝里爬出来&#8230;听着歌，享受着慢慢，静静，轻轻，懒懒，暖暖的感觉&#8230;.听到了＂我和春天有个约会＂，一首先老的歌&#8230;想起了一个人..不知远在几千公里之外还好吗，是否正在努力实现着自己的梦想&#8230;而我的梦想呢，才发现，梦想被我弄丢了&#8230;</div>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jonasyang.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jonasyang.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonasyang.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonasyang.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jonasyang.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jonasyang.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jonasyang.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jonasyang.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jonasyang.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jonasyang.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jonasyang.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jonasyang.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jonasyang.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jonasyang.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jonasyang.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jonasyang.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=9&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jonasyang.wordpress.com/2007/05/19/%e5%91%a8%e6%9c%aa%e7%9a%84%e6%87%92%e8%a7%89/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/742d83873ba88997d1a4adc9e5185be0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jonasyang</media:title>
		</media:content>
	</item>
		<item>
		<title>回杭州咯</title>
		<link>http://jonasyang.wordpress.com/2007/04/29/%e5%9b%9e%e6%9d%ad%e5%b7%9e%e5%92%af/</link>
		<comments>http://jonasyang.wordpress.com/2007/04/29/%e5%9b%9e%e6%9d%ad%e5%b7%9e%e5%92%af/#comments</comments>
		<pubDate>Sun, 29 Apr 2007 02:46:02 +0000</pubDate>
		<dc:creator>jonasyang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://jonasyang.wordpress.com/2007/04/29/%e5%9b%9e%e6%9d%ad%e5%b7%9e%e5%92%af</guid>
		<description><![CDATA[终于放长假了&#8230;.要好好休息一下了&#8230;.大假之后继续加油&#8230; 今天要和CYJJ拼酒了&#8230;.不知道会不会倒下&#8230;呵呵～～<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=10&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!42122FAEC601BB98!278" class="bvMsg">
<div>终于放长假了&#8230;.要好好休息一下了&#8230;.大假之后继续加油&#8230;</div>
<div>今天要和CYJJ拼酒了&#8230;.不知道会不会倒下&#8230;呵呵～～</div>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jonasyang.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jonasyang.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonasyang.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonasyang.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jonasyang.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jonasyang.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jonasyang.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jonasyang.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jonasyang.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jonasyang.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jonasyang.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jonasyang.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jonasyang.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jonasyang.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jonasyang.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jonasyang.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jonasyang.wordpress.com&amp;blog=20957948&amp;post=10&amp;subd=jonasyang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jonasyang.wordpress.com/2007/04/29/%e5%9b%9e%e6%9d%ad%e5%b7%9e%e5%92%af/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/742d83873ba88997d1a4adc9e5185be0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jonasyang</media:title>
		</media:content>
	</item>
	</channel>
</rss>
