隨筆 - 147  文章 - 71  trackbacks - 0
          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類(146)

          隨筆檔案(147)

          文章分類(28)

          文章檔案(28)

          喜歡的Blog

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          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號提供的,其實lg,rg的夾角均為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,寬為yC價錢的液晶,那么有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: 取款

          很簡單的一道模擬題。

          開辟一個大小為Ka數組代表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,zz+dz將容器切為一個小片片,dz很小時,小片片的體積v’=S*dz,S是小片片的截面面積,其方程為 ,兩邊除以,:

          其面積

           ,得到體元素為

           z的變化范圍是[0,h],

          posted on 2009-10-05 10:07 飛翔天使 閱讀(255) 評論(0)  編輯  收藏 所屬分類: ACM
          主站蜘蛛池模板: 怀集县| 临邑县| 苏尼特右旗| 达孜县| 丁青县| 米脂县| 贵州省| 镇坪县| 民乐县| 普兰店市| 淮滨县| 无棣县| 平邑县| 巨鹿县| 盐池县| 洛宁县| 斗六市| 泰宁县| 砀山县| 嵊泗县| 文化| 麦盖提县| 滨海县| 南涧| 庆元县| 玉门市| 调兵山市| 晋江市| 望江县| 来安县| 平原县| 太和县| 通化县| 南京市| 十堰市| 泰州市| 澳门| 天气| 乡宁县| 太仓市| 玉门市|