Loading...

Archive

Posts Tagged ‘NOI’

NOIp 2009 解题报告

November 26th, 2009 7 comments

以下是我的NOIp 2009 (提高组) 解题报告.

第一题(潜伏者, spy): 略.

第二题(Hankson 的趣味题, son):

Gcd(x,a0)=a1, Gcd(x,b0)=xb0/b1

设f(a,b) 代表b这个质因子在a中有多少个.

对于a0的任意质因子t, 若f(a0,t)=f(a1,t) 则只需保证f(x,t)≥f(a1,t), 否则f(x,t)=f(a1,t)

对于b1的任意质因子t, 若f(b1,t)=f(b0,t) 则只需保证0≤f(x,t)≤f(b1,t), 否则f(x,t)=f(b1,t)

由于x的所有因子都是b1的子集, 所以我们只需对b1的质因子按如上方法逐个检查这个质因子在x里面的取值范围(若为空则说明无解), 并按照乘法原理统计即可.

关于分解质因子: 由于b1不会超过2*10^9, 大于50000的质因子不会超过1个, 所以我们只要打出50000以内的素数表即可, 若最后除剩的b1仍未除尽, 说明此时b1一定是一个大于50000的素数.

第三题(最优贸易, trade):

做法1:

设Low[i]为从1到i当前所有路径中最便宜的价格. Profit[i]为从1到i当前所有路径中最大获利. 初始时Low[1]=P[1], Low[2..n]=infinity, Profit[1..n]=0.

那么我们可以从1开始广搜, 要注意一个点有可能多次被更新.

从i可以更新到j的条件是:

1. 存在有向/无向边(i,j)

2. Low[j]>Low[i] 或 Profit[j]<Profit[i]

做法2:

首先考虑没有环的情况, 此时1,n之间要么无法连通, 要么只存在一些单向的无环路径. 对于每一条路径, 由于不能”回头”, 走到某个点i的极优获利显然是i的费用-路径上此点之前的点的最小费用, 而此路径的最大获利便是取获利最大的点.

但是还有很多数据是有环的, 也就是对于有些点对(a,b), 在a走到b之后, b仍然可以走回到a. 在图论中, 我们把点集V, 其中任意两个点可以互达, 叫做强连通分量.

由于强连通分量中的点可以互相到达, 所以在一个强连通中的最大获利就是强连通中最贵的-最便宜的. 我们把所有强连通分量求出来缩为两个点之后. 1与n之间只存在一些无环路径, 对于这些单向的无环路径我们只需要扫描一遍便可求出最大获利.

强连通缩为两个点的具体做法: 把一个强连通缩为a,b 两个点, 连(a,b)边, a的费用为强连通中最便宜的, b的费用为强连通中最贵的. 把指向强连通中任何一个点的所有边改为指向a, 把强连通中任何一点指向强连通外部的边改为由b指出. 这样构出来的保证与原图等价.

第四题(靶形数独, sudoku): 很直白的搜索, 由于数独是NP-H问题, 所以我们肯定只能用搜索, 那么关键就在于剪枝了, 我们发现, 对于每个格子都有一个取值范围, 这个范围由其横行/纵行/小九宫格中已填的数决定, 那么无疑我们每次搜索选取值范围最小的格子搜是比较优的.

Categories: Informatics Tags: ,

Struggle for NOIp 2009!

November 19th, 2009 No comments

RP++

Struggle for what you want!

Be confident, and I will win!

Categories: Informatics Tags:

Struggle For HNOI 2009!

July 3rd, 2009 2 comments

RP++

The NOI Hunan Team Selective Competition is coming…
Be confident, and then I will win! (via Byvoid)
I’ll be the one, who will make all the sorrows undone!

Pray & bless, I’ll be the one!

Struggle For HNOI 2009, Struggle For OI!

Categories: Informatics, Trivia Tags: ,

NOI 2009 冬令营 · 笔记 (二)

January 18th, 2009 No comments

冬令营17日

 

首先说一下,今天的内容是我目前为止的收获最大的,因为今天的内容很多都涉及到了数学,还有就是晚上论文答辩的时候,吴文虎教授特别提到了一些有关信息学前景以及有关我们学习信息学的目的的问题,吴教授的发言我应该会在冬令营录像发下来之后录进电脑。

 

上午

 

内容: 信息学竞赛中的数学建模初探

授课: 李学武, TGC

 

李学武教授我仰慕很久了,因为李教授在数学理论方面建树颇丰,很有研究。今天听他的讲课更是深有感触。其实学信息学,数学是最重要而且密不可分的模块,不,不是模块,信息学就是数学的一部分,信息学研究的用强大的计算速度解决数学问题,其中有求解的,也有证明的,关于机器证明的那一部分,今年的集训队论文有人提到了,还不够彻底,我记得有一套书叫做《好玩的数学》中有一章就是讲的机器证明,很经典。这部分我以后再谈。

李教授讲的就是有一本数学名著《具体数学》中的一些经典问题,这里我提一下比较重要的部分。

递推关系与求和: 引入是 Josephus (约瑟夫)问题,我们已经知道,关于约瑟夫问题,有模拟的方法可解,但是,有没有更好的方法呢?答案是肯定的,我们观察每次报数出圈,有当前为偶数号的一部分人出圈,接下来,又是新一轮的报数出圈,而且有一部分人成了新的偶数号,我们不难发现,整个出圈的过程,就是一个递归的过程,好,那么我们定义 J(n) 为在有 n 个人的圈上,最后剩下来的人是几号。易得出如下三个递归定义的表达式:

(1)    J(1)=1

(2)    J(2n)=2J(n)-1

(3)    J(2n+1)=2J(n)+1

其中 n 为正整数。

然后我们易得出一个闭形式 (closed form) 的表达式: J(2^m +l)=2l+1.

我们来看一下能不能再化简,我们把 n 化为一个 m 位二进制数,第一位为 B1,最后一位为 Bm,那么我们从那个闭形式表达式惊异地发现,每一次 J(n) 操作,只是把 n 这个二进制数的第一非零位 B1 ,移到 Bm 之后!多么神奇的性质啊!(原因请自己推导)那么,在进行多次 J(n) 操作之后,在进行 J(n) 操作值就会不变了,原因是 n 的所有二进制位都变成 1 了,我们把这样的值叫做“不动点”,这个概念在复合函数中经常提到。多次调用这个函数,不动点会出现在原 n 二进制数中 1 的个数 k 次以下(因为尾部可能有连续的 1),而不动点的值就是 2^(k+1)-1.

我们再把刚刚那些递归定义的式子拓展一下:

(1)    f(1)=α

(2)    f(2n)=2f(n)+β

(3)    f(2n+1)=2f(n)+γ

我们再来尝试用闭形式来描述这些递推式。

观察后知,我们把这个函数写成 f(n)= A(n)α+B(n)β+C(n)γ.

我们列表发现,A(n)事实上是等于 trunc(log n), 而 B(n) 呢,则在 A(n) 不变的周期中随着 n 的增加而从 A(n)-1 递减到 0, C(n) 则恰好相反,在 A(n) 不变的周期中随着 n 的增加而从 0 递增到 A(n)-1. 这些结论,事实上可以由归纳法证明。

接下来,李教授讲了一些关于 sigma 式的化简,由于过于简单,我在这里就不再叙述了。但是李教授提出的思想却是相当好的:

递归<–>求和

  |      |

  >闭形式<

在有诸多表达式形式的情况下,我们要熟练掌握表达式的转化,这样我们才能高效地分析问题,从而解决问题。但这又需要我们有相当扎实的数学理论功底,以前对于名言“数学是无穷的科学”的理解一直停留在“数学题是做不完”的层面(哈哈!),而我们现在发现,数学的代数变换,几何变换,以及数形结合还有最新的机器解题(信息学)等方面的探索是无穷无尽的,数学是最基础的自然科学,它的发展推动着整个科学界的发展。

下午是 TSU 的周源同学讲随机化算法,由于牵扯到很多概率的知识,我留到以后再讲;晚上答辩时吴文虎教授的讲话,我准备单独地写一篇文章,就不在这里写了。

Categories: Informatics Tags:

NOI 2009 冬令营 · 笔记 (一)

January 15th, 2009 No comments

冬令营 Day 1.

 

上午

内容: 游戏中的数学模型与解题思路

授课人: 吴文虎教授,TSU.

 

今天上午是冬令营的第一堂课,按照惯例,第一堂课都是国际信息学奥林匹克中国队总教练清华大学教授吴文虎教授上的。

吴老一上课就给我们演示了一个“人鬼渡河”游戏,游戏规则是:有3人3鬼在东岸,有一条船容量为2,初始停在东岸,若某一岸(包括停在该岸边的船)上的鬼比人多,那么人就会被鬼吃了。请问如何将3人3鬼安全送到西岸?(注意:船不是电动的,必须要人或鬼划船)。

吴教授首先按照东岸的人数与鬼数表示一个状态:东岸的(人数,鬼数),有一些状态是安全的,有一些是不安全的(东岸或西岸鬼比人多),然后考虑状态的转移方式(即决策),转移(人数,鬼数),有:(1,0),(0,1),(1,1),(2,0),(0,2). 然后我们看我们的转移次数,当目前转移是奇数次时,一定是从东到西,所以是状态量减去决策量;若是偶数,则是从西到东,是状态量加上决策量。接下来我们要考虑判重,当我们东岸状态已经达到过并且船在同一侧时,我们需要剪枝。这样,一个标准的广搜就完成了(最初吴教练是用类似递推的方法,不记录历史状态,其实这样是有反例的:当我们把决策的考虑顺序打乱时,我们很容易走进死胡同,没有历史状态就没法回溯,所以是不正确的)。

休息几分钟后,吴教练开始讲递归,简单介绍了与或节点图,然后又简要地提了一下评估函数,东西都很简单,都是讲一下思想,我在这里就不写了。

 

当然,作为国家队总教练,吴教授讲的都是一些程序设计时的思想方法,比如说人鬼渡河这个例子,我们要从冗长的题目描述中提炼出关键信息,抽象成数学模型,然后从考虑数学模型中转移的方式,找到在数学模型中的转移决策,我们就能够很快地找到解决问题的较优方法。

另外,递归思想事实上是很奇妙的,在数学中也有很广泛的应用,还有很有趣的递归构造的分形Sierpinski三角形,以后我接着写吧。

 

下午

内容:IOI 2008 试题分析

授课人:周冬,原国家队队员,TSU.

这个试题分析其实就是简要地分析一下年鉴上的 IOI 2008 试题解法。有兴趣的可以去看看年鉴,我就不写了。

内容:博弈论相关

授课人:余林韵,TSU.

很有意思的课,首先这位同学简要介绍了 TSU 的“BIDU杯”程序设计大赛,然后他介绍了最近一届大赛“TankCraft”的情况,事实上就是 AI 竞赛,选手们的 AI 间互相打游戏,胜者为王。我们看了决赛的几个回放,真的很精彩,AI 算法都很强大。只是有一次出了一点小 Bug ,双方的3辆 Tank 都相持不动,因为双方都采用了预测对方策略的算法,而且两边都预计对方下一步会攻击,所以原地不动,很有意思。接下来,这位同学简要介绍了一下博弈论,提到的有 Nash均衡点 等博弈知识,其中有一个例子很有意思:有两个囚犯带枪准备犯案,被警察抓住了,警察发现他们以前也犯过罪,但找不到证据,于是拘留了他们俩,隔离突击审讯。如果两个都没招,那么他们俩因“非法携带枪支”各判一年;若有一个招了,另一个没招,那么,没招的那个会判15年,招了的那个因为是证人所以没有被起诉;如果两个都招了,则各判10年。我们来看一看 Nash 均衡点 在哪里:甲想如果甲不招,乙很可能会招,甲会判15年,而甲招了的话,有可能不会被起诉,也有可能是被判10年。所以,甲会招。同理,乙也会招。所以他们两个各被判10年。所以这个问题的 Nash均衡点 在两个都招了的状态这。说明 Nash均衡点 对于某些问题并不是最优的方案。

 

晚上

我们去了位于办公楼的机房,很惊讶地发现装的系统是基于 Ubuntu (Linux) 的 NOI Linux 系统,是中国计算机学会 (CCF) 联合北京航空航天大学开发的一套系统,包括一套开源的信息学竞赛 IDE 系统和一套信息学竞赛评测系统,估计 NOIp 2008 就是在这个环境下评测的。很不错的一套系统。

Categories: Informatics Tags: ,