<?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/"
	>

<channel>
	<title>aifreedom &#187; Ural</title>
	<atom:link href="http://aifreedom.com/tag/ural/feed" rel="self" type="application/rss+xml" />
	<link>http://aifreedom.com</link>
	<description>Just feel free as in freedom</description>
	<lastBuildDate>Sun, 20 May 2012 05:46:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>[Ural 1003]Parity</title>
		<link>http://aifreedom.com/programming/33#utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ural-1003</link>
		<comments>http://aifreedom.com/programming/33#comments</comments>
		<pubDate>Thu, 14 Feb 2008 11:57:18 +0000</pubDate>
		<dc:creator>aifreedom</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ural]]></category>
		<category><![CDATA[并查集]]></category>
		<category><![CDATA[解题报告]]></category>

		<guid isPermaLink="false">http://aifreedom.com/science/33</guid>
		<description><![CDATA[本文在署名-非商业性使用-相同方式共享 3.0版权协议下发布, 转载请注明出自aifreedom.com 这题做了很久才最终AC, NOIP前就写过, 但当时没能通过自己写的样例. 后来很久没有做题, 直到最近才把这题做掉. 但做的过程中很郁闷, 所以来写个简单的解题报告.(Ural 1003) 题目意思很好理解, 没有什么歧义, 思路也很容易想到. 首先, 用N(i)表示1..i的01序列中, 1的个数, 那么"a b even"表示N(a-1)和N(b)同奇偶, "a b odd"表示N(a-1)和N(b)不同奇偶. 那么很自然的会想到用并查集, 但怎么用就有学问了. 而且题中序列的长度太长, 且远大于询问次数, 要用到hash或者离散化(我一开始居然用离散化.. 硬是把O(n)的算法弄到了O(nlogn).. 晕..). 最初朴素的想法是将同奇偶的归到一个集合中, 并且在每个集合的根处记录下与这个集合奇偶性相反的集合标号. yuhch大牛也是这样做的, 但我在编程实现的过程中遇到了不少麻烦. 想找yuhch要来他的程序看看, 但他说他N年前AC的, 程序早就不在了.. 改换思路, 在使用并查集的时候记录每个节点和它的父亲的奇偶性是否相同. 并且用到了xor运算的一些性质: xor的逆运算还是xor, 而xor运算的真值表有正好和整数奇偶性相同. 于是可以很好地降低编程复杂度. 你可以点击这里下载我已AC的源程序. 链接 &#124; 评论(2) &#124; 关于我 本站原创作品在署名-非商业性使用-相同方式共享 3.0版权协议下发布，转载请注明出处。 &#169; 2007-2009 作者及版权归属: Ai.Freedom]]></description>
			<content:encoded><![CDATA[<p><strong>本文在</strong><a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank"><strong>署名-非商业性使用-相同方式共享 3.0</strong></a><strong>版权协议下发布, 转载请注明出自</strong><a href="http://aifreedom.com/"><strong>aifreedom.com</strong></a></p>
<p>这题做了很久才最终AC, NOIP前就写过, 但当时没能通过自己写的样例. 后来很久没有做题, 直到最近才把这题做掉. 但做的过程中很郁闷, 所以来写个简单的解题报告.(<a href="http://acm.timus.ru/problem.aspx?space=1&amp;num=1003" target="_blank">Ural 1003</a>)</p>
<p>题目意思很好理解, 没有什么歧义, 思路也很容易想到. 首先, 用N(i)表示1..i的01序列中, 1的个数, 那么"a b even"表示N(a-1)和N(b)同奇偶, "a b odd"表示N(a-1)和N(b)不同奇偶. 那么很自然的会想到用并查集, 但怎么用就有学问了. 而且题中序列的长度太长, 且远大于询问次数, 要用到hash或者离散化(我一开始居然用离散化.. 硬是把O(n)的算法弄到了O(nlogn).. 晕..).</p>
<p>最初朴素的想法是将同奇偶的归到一个集合中, 并且在每个集合的根处记录下与这个集合奇偶性相反的集合标号. yuhch大牛也是这样做的, 但我在编程实现的过程中遇到了不少麻烦. 想找yuhch要来他的程序看看, 但他说他N年前AC的, 程序早就不在了..  改换思路, 在使用并查集的时候记录每个节点和它的父亲的奇偶性是否相同. 并且用到了xor运算的一些性质: xor的逆运算还是xor, 而xor运算的真值表有正好和整数奇偶性相同. 于是可以很好地降低编程复杂度.</p>
<p>你可以点击<a href="http://aifreedom.com/attachment/20080214/2008021404.cpp" target="_blank">这里</a>下载我已AC的源程序.</p>
<a href="http://aifreedom.com/programming/33" title="链接">链接</a> | <a href="http://aifreedom.com/programming/33#comments" title="评论">评论(2)</a> | <a href="http://aifreedom.com/about" title="About">关于我</a>
<hr /><small><p><a target="_blank" rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh">

<img alt="Creative Commons License" style="border-width: 0pt;" src="http://i.creativecommons.org/l/by-nc-sa/3.0/80x15.png">

</a>本站原创作品在<a target="_blank" rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh">署名-非商业性使用-相同方式共享 3.0</a>版权协议下发布，转载请注明出处。<br />

&copy; 2007-2009 作者及版权归属: <a href="http://aifreedom.com/">Ai.Freedom</a> </small>]]></content:encoded>
			<wfw:commentRss>http://aifreedom.com/programming/33/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

