The 5th(2010) ACM Programming Contest of HUST

来源:互联网 发布:网络协议与分析8题 编辑:程序博客网 时间:2024/06/05 16:48

为了练习java和近来结冰的脑子,做了做这套题,下面简略的总结下

题目地址:http://acm.hust.edu.cn/thx/contest.php?cid=1075

A:

题目描述:定义两类函数D(x)和F(x)

其中D(x)表示x的数字位

如果 x<10 F(x)=x 否则F(x)=F(D(x))

做法:直接暴力

 

B:

题目描述:对于两瓶k级的药,可以合成1瓶k+1级的药

给定一个N,表示N个等级,给定一个f表示卖价是买价的f倍

给定N个数,表示每个等级的买价

做法:枚举相邻的比较 pre*2与 now*f的大小关系即可

 

C:

呜呜不会~~

 

D:

题目描述:给定n个人,m件糖

给出n个人对糖果的个数的需求范围[L[i],R[i]]

求有多少种方案

做法:DP

dp[i][j]表示前i个人用了j件糖果的方案数

那么对于i这个人dp[i][j]=sum(dp[i-1][k])(max(0,j-R[i])<=k<=j-L[i])

转移可以用树状数组或者线段树优化,也可以预处理出来

复杂度n*m

 

E:

饿就是一个排序的模拟,按成绩算排名

 

F:

我采用的是非完美的算法

详细请点击http://blog.csdn.net/foreverlin1204/archive/2011/01/11/6128197.aspx

 

G:

挺不错的一个数学题,暂时还没做出来

大概意思是:给定n个三维点(n<=10000)

对于三个不同的点组成的点对i,j,k

                 |x[i],y[i],z[i]|

det[i,j,k]= |x[j],y[j],z[j]|

                |x[k],y[k],z[k]|

如果行列式值是3的倍数则计数器++

问总共有多少对,欢迎和我探讨

 

H:

按照题目给的公式算就可以了

 

I:

一个概率期望题

详细请点击http://blog.csdn.net/foreverlin1204/archive/2010/12/20/6087335.aspx

 

J:

题目描述:给定一棵树,求每个点的孩子数

分析:dfs一遍即可

 

K:

求四面体体积

详细请点击http://blog.csdn.net/foreverlin1204/archive/2011/01/08/6124184.aspx

 

L:

给定n个数字的序列,给定m个操作

有两类:(1)交换位置在x和y上的两个元素(2)交换值为x和y的两个元素

设定a[i]表示位置i上的值, b[i]表示值为i的位置,构建双映射维护即可

 

个人推荐,比较有意思的三题:F G I

以上基本上代码都是用java写的,从中发现了不少的问题,对我这个java菜鸟而言

比如排序规则,比如如何正确使用容器,比如何时要用public static不能乱用,特别是类成员

原创粉丝点击