ACM/ICPC Greater NewYork 2006 Report

来源:互联网 发布:java架构师认证考试 编辑:程序博客网 时间:2024/05/12 17:21

这套题终于简单了些 至少感觉比上一套简单 。

A.Quick Change HOJ2411
久违的感觉了,简直太简单了!!

B.Triangular Sums HOJ2412
也是水题。

C.Shuffle'm Up HOJ2413
模拟题,也没什么意思。 这里有一个枚举上界的判断,就是说洗牌状态与要求状态永远也不可能吻合的时候要做出反应。这样的问题总是没有什么好方法,随便用了一个上界就过了。

D.Push Button Lock HOJ2414
组合数学题。之前我怎么也看不懂题意,感谢下面这位仁兄。

以下摘自http://blog.sina.com.cn/u/49be662301000722

题意大致如下:给你一个数n,求出将1~n的n个数放入k(1<=k<=n)个不同的盒子的个数,有的可以选择不放入盒子。n的规模是11,输入一个n,输出总个数。

分析一下,令t(p,k)表示p个不同的数放入k个不同的非空盒子的个数,那么所有的可能情况无非是有1,2,…,n-1,n个数被放入盒子,如果是p个数放入盒子,一共有C(n,p)有方法选择哪些数被放入盒子,显然每一种选法都是不一样的,假定选定了p个数,那么可以考虑把他们分别放入1,2,…p-1,p个不同的非空盒子中,显然每一种方法都是不一样的,假定选择放入k个不同的盒子中,那么放法数为t(p,k),而且知道除了上面的放法外,不再有其他的某种放法。所以穷举所有可能的p,k的情况,总的放法为∑t(p,k)*C(n,p)(1<=p<=n,1<=k<=p).至于t(p,k)前面分析过这种问题,有以下递推公式
t(p,k)=t(p-1,k-1)*k+t(p-1,k)*k(根据第p个球是否单独放在一个盒中)(p>k>1)
t(p,1)=1,t(p,p)=p!
递推关系复杂度为O(n^2),组合数为O(n),总复杂度为O(n^2),n规模11,显然可以接受的
可见,一个看似很复杂的问题就转换成了一个很容易的递推问题。
这里有一点要注意的是t(p,k)表示的是放入非空盒,如果盒子可空,就不能这么写。试想一下,现在已经选定了p个球,现在要将他们放入若干个不同的盒子,可不可以把这个模型转换为将选定的p个求放入p个不同盒子,其中有些盒子可空。考虑映射关系将p个球放入k个不同的非空盒的每一种放法等价于将p个球放入p个可空盒,其中p-k个为空盒的C(p,p-k)种放法数(选择哪p-k个盒子为空盒),而后者的每一种放法都对应前者唯一的一种,所以很明显求出的结果会多于实际所求。

E.看不懂+被它的气势吓到了。

F.Visible Lattice Points HOJ2416
方法很多。我的方法是用欧拉函数。因为图形对称,所以只算一面就可以了。在X*Y的空间内被挡住了能连的线的数目就是比Y小的、和Y互质的数的个数(这里要注意这道题里1也算互质)。为了使用欧拉函数,先做一个素数表。这样做效率还是很高了,只比打表慢一点点。

G.Triangular N-Queens Problem HOJ2417
这道题第一眼当然认为是回溯,结果观察了一下sample,发现ms可以构造。这可能是出题者的本意,因为这道题的sample特别多,没发现有规律真的不太可能。可恶的是太多的格式上的trick,而且spj写的一律将PE判成WA,被郁闷了很久。证明稍后放上来。

H.Non-divisible 2-3 Power Sums HOJ2418
也是类似于构造的思路。先将n不断去除2,到除不尽为止,有n=(2^x)*m,此时m必为奇数;然后求出小于n并且最接近n的(2^x)*(3^y),则有n1=n-(2^x)*(3^y)=(2^x)*(m-3^y),这时得到n1=(2^x)*m1,继续对n1执行如上步骤,即可。

I.Margaritas on the River Walk HOJ2419
DP。先对数列排序。考虑没有最小的元素的组合,依次记录各种未超过上限m的组合的和出现的次数,将m-num[i]~m间的和出现的次数累加。然后考虑没有次小的,从前至后依次处理。这里可以对每个数字处理时都更新上限,上限小于零时跳出。

原创粉丝点击