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]用二進制表示時共有幾位
所以,我們可以統(tǒng)計所有輸入的數(shù),當它們用二進制表示時,第 i位為1時的次數(shù),咱們用c[i]表示(注意此c[i]跟上面的c[i]意義不一樣),觀察到, 當某位出現(xiàn)的次數(shù)為n時,其加到ans上的次數(shù)應(yīng)為n*n,由些可得
ans = sum{2^i*c[i]*c[i]}(0<=i<k) k表示這些數(shù)中用二進制表示時的最大位數(shù).
????????????????????????????????????
偶是華麗的分割線嘎
????????????????????????????????????
Problem B: 圓柱堆問題
假設(shè)取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為重力在對應(yīng)的l或者r 方向的分力.
接下來考慮最后一行的柱體對左擋板的壓力
對于最后一行的柱體,假設(shè)向左的力是正,向右是負,則其水平方向的合力為F[i]=(a[n][i].l-a[i][i].r)/2
現(xiàn)在我們從左至右考慮每根圓柱.每個圓柱產(chǎn)生的水平力非正即負或零,我們累加這個合力.假設(shè)存儲為sum=
,其中,當1<=i<=k時,F[i]>0,現(xiàn)在考慮第k+1個圓柱.如果F[k+!]>0,那么顯然,第k+!個圓柱產(chǎn)生的合力也要被左擋板承受,sum+=F[k+!];反之,如果F[k+!]<0,第k+1個圓柱產(chǎn)生的力是向右的,(我有向本題作者要過測試數(shù)據(jù),測試數(shù)據(jù)就認為這時的sum值就是左擋板的壓力),這里,我們再分兩種情況:一.當k+1<=i<=n時,如果F[i]<0,說明第k個圓柱后面的產(chǎn)生合力都是向右,那么這個壓力是由右擋板承受的,左擋板所受的壓力就是sum;二,第k+1個圓柱后面的圓柱存在某個合力仍然向左的圓柱(假設(shè)這個圓柱是第m個圓柱).這種情況下,第k+1個圓柱到第m-1個圓柱產(chǎn)生向右的水平力會被該圓柱產(chǎn)生向左的水平力抵消一部分,甚至可能超過,這樣兩者產(chǎn)生的合力仍然是向左的,所以左擋板所受的壓力要加上該值.分析到這里,我們不難看出,計算左擋板壓力的方法: 從左至右,累加各個圓柱的合力,這個合力的最大值,就是左擋板所受的力.
????????????????????????????????????
又是華麗的分割線
????????????????????????????????????
Problem C: 液晶切割
注意到每次可以把一塊矩形液晶水平或者豎直地切成兩塊,一開始沒看到這個,把問題想復(fù)雜了許多,囧~~~~~
開一個二維數(shù)組dp[X][Y],dp[i][j]代表長為i寬為j的液晶塊能切割能賣出的最多價錢,那么由于切割方式是水平或者豎直地切成兩塊,就有轉(zhuǎn)換方程
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,因為數(shù)據(jù)沒有嚴格按題目的要求給出(題目是說n種尺寸不一,且長大于寬的液晶),故可能出現(xiàn)如下數(shù)據(jù)
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數(shù)組代表K個營業(yè)員要工作到的時間
每讀到一個客戶,先把該客戶的到達時間轉(zhuǎn)換成秒S,然后找到這K個營業(yè)員工作的時間最短的a[i],然后a[i] = (Max(a[i],S) + 該客戶業(yè)務(wù)所要辦理的時間)
當wzc到達時,按上面的方法求得a[i]后,判斷a[i] 是否小于17*3600,即是否未到銀行關(guān)閉時間,如果小于,則將a[i]轉(zhuǎn)換為相應(yīng)的時秒分格式,否則就輸出Bad Luck!
由于每次要找到K個營業(yè)員的最短時間,可以將這K個數(shù)構(gòu)造成一個最小堆,時時維護,不過對于此題,K <= 100,沒啥必要-_-…….
????????????????????????????????????
持續(xù)華麗的分割線
????????????????????????????????????
Problem E: 橢圓容器問題

知識準備:
1. 橢圓面積公式:
S=πab
這個公式要用到橢圓的參數(shù)方程,具體推導(dǎo)過程可以參閱任何一本<<高等數(shù)學(xué)>>或者<<數(shù)學(xué)分析>>中關(guān)于定積分的應(yīng)用,(高等數(shù)學(xué)同濟大學(xué)第六版上冊276頁例3)
2.橢圓體體積公式:
V= 4/3πabc= 
這個微積分公式是本題的關(guān)鍵,見下面的推導(dǎo)吧 .^_^.
我們只考慮上半球,假設(shè)有一個上半橢圓球容器
(z>=0),裝有若干水,水面高度為h.對于0<=z<=h,z到z+dz將容器切為一個小片片,當dz很小時,小片片的體積v’=S*dz,S是小片片的截面面積,其方程為
,兩邊除以
,得:
其面積
,得到體元素為
又z的變化范圍是[0,h],有


posted on 2009-10-05 10:07
飛翔天使 閱讀(254)
評論(0) 編輯 收藏 所屬分類:
ACM