Problem A: Easy problem
对于ans+=a[i]&a[j], 实际上是加上sum{2^i}(0<=i<k && c[i] == 1)其中c[i] 是a[i]&a[j]用二进制表示时第i位的值,k代表a[i]&a[j]用二进制表示时共有几位
所以,我们可以统计所有输入的数,当它们用二进制表示时,第 i位为1时的次数,咱们用c[i]表示(注意此c[i]跟上面的c[i]意义不一样),观察到, 当某位出现的次数为n时,其加到ans上的次数应为n*n,由些可得
ans = sum{2^i*c[i]*c[i]}(0<=i<k) k表示这些数中用二进制表示时的最大位数.
❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀
偶是华丽的分割线嘎
❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀
Problem B: 圆柱堆问题
假设取1号做受力分析(只考虑上方对其的作用力),那么有
其实力l是由3号提供的,r是由2号提供的,其实l与g,r与g的夹角均为30度,我们假定一个柱体,受到斜向左的力为l,斜向下右的力为r,重力为w,a[i][j]代表第i行第j个圆柱体,那么有
a[i][j].l = a[i-1][j].l + a[i-1][j].w * sqrt(3) / 3
a[i][j].r = a[i-1][j-1].r + a[i-1][j-1].w * sqrt(3) / 3
a[i-1][j].w * sqrt(3) / 3为重力在对应的l或者r 方向的分力.
接下来考虑最后一行的柱体对左挡板的压力
对于最后一行的柱体,假设向左的力是正,向右是负,则其水平方向的合力为F[i]=(a[n][i].l-a[i][i].r)/2
现在我们从左至右考虑每根圆柱.每个圆柱产生的水平力非正即负或零,我们累加这个合力.假设存储为sum= ,其中,当1<=i<=k时,F[i]>0,现在考虑第k+1个圆柱.如果F[k+!]>0,那么显然,第k+!个圆柱产生的合力也要被左挡板承受,sum+=F[k+!];反之,如果F[k+!]<0,第k+1个圆柱产生的力是向右的,(我有向本题作者要过测试数据,测试数据就认为这时的sum值就是左挡板的压力),这里,我们再分两种情况:一.当k+1<=i<=n时,如果F[i]<0,说明第k个圆柱后面的产生合力都是向右,那么这个压力是由右挡板承受的,左挡板所受的压力就是sum;二,第k+1个圆柱后面的圆柱存在某个合力仍然向左的圆柱(假设这个圆柱是第m个圆柱).这种情况下,第k+1个圆柱到第m-1个圆柱产生向右的水平力会被该圆柱产生向左的水平力抵消一部分,甚至可能超过,这样两者产生的合力仍然是向左的,所以左挡板所受的压力要加上该值.分析到这里,我们不难看出,计算左挡板压力的方法: 从左至右,累加各个圆柱的合力,这个合力的最大值,就是左挡板所受的力.
❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀
又是华丽的分割线
❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀
Problem C: 液晶切割
注意到每次可以把一块矩形液晶水平或者竖直地切成两块,一开始没看到这个,把问题想复杂了许多,囧~~~~~
开一个二维数组dp[X][Y],dp[i][j]代表长为i宽为j的液晶块能切割能卖出的最多价钱,那么由于切割方式是水平或者竖直地切成两块,就有转换方程
dp[i][j] = Max{dp[i][j], dp[i-k][j]+dp[k][j]}(1<=k<=i/2)
dp[i][j] = Max{dp[i][j], dp[i][j-k]+dp[i][k]}(1<=k<=j/2)
而dp[i][j]的初始值为如果有长度为x,宽为y的C价钱的液晶,那么有dp[x][y] = dp[y][x] = C,因为数据没有严格按题目的要求给出(题目是说n种尺寸不一,且长大于宽的液晶),故可能出现如下数据
3 2 100
2 3 3
那么很明显我们的dp[3][2]和dp[2][3]必须取100而不是3,即在赋值的时候要加一个判断if(dp[x][y]<C)才进行赋值,对于其他情况全部为dp[i][j]=0.
最终答案为dp[X][Y],X,Y为大液晶块的长和宽
❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀
粉华丽的分割线
❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀
Problem D: 取款
很简单的一道模拟题。
开辟一个大小为K的a数组代表K个营业员要工作到的时间
每读到一个客户,先把该客户的到达时间转换成秒S,然后找到这K个营业员工作的时间最短的a[i],然后a[i] = (Max(a[i],S) + 该客户业务所要办理的时间)
当wzc到达时,按上面的方法求得a[i]后,判断a[i] 是否小于17*3600,即是否未到银行关闭时间,如果小于,则将a[i]转换为相应的时秒分格式,否则就输出Bad Luck!
由于每次要找到K个营业员的最短时间,可以将这K个数构造成一个最小堆,时时维护,不过对于此题,K <= 100,没啥必要-_-…….
❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀
持续华丽的分割线
❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀
Problem E: 椭圆容器问题
知识准备:
1. 椭圆面积公式:
S=πab
这个公式要用到椭圆的参数方程,具体推导过程可以参阅任何一本<<高等数学>>或者<<数学分析>>中关于定积分的应用,(高等数学同济大学第六版上册276页例3)
2.椭圆体体积公式:
V= 4/3πabc=
这个微积分公式是本题的关键,见下面的推导吧 .^_^.
我们只考虑上半球,假设有一个上半椭圆球容器(z>=0),装有若干水,水面高度为h.对于0<=z<=h,z到z+dz将容器切为一个小片片,当dz很小时,小片片的体积v’=S*dz,S是小片片的截面面积,其方程为 ,两边除以,得:
其面积
,得到体元素为
又z的变化范围是[0,h],有
posted on 2009-10-05 10:07
飞翔天使 阅读(248)
评论(0) 编辑 收藏 所属分类:
ACM