• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 97, 文章 - 22, 評論 - 81, 引用 - 0
            數(shù)據(jù)加載中……

            Mid-Central USA 2009 解題報(bào)告

             

            A. Up and Down
                   
            PKU 3912 http://poj.org/problem?id=3912

             

                   題意:給定一個(gè)一維的棋盤,范圍為[0, W] (W <= 1000,000,000),某兩個(gè)點(diǎn)之間有梯子或蟲洞,梯子的下端點(diǎn)到上端點(diǎn)以及蟲洞的上端點(diǎn)到下端點(diǎn)花費(fèi)的步數(shù)為0,其它任意點(diǎn)之間的距離通過跳躍來計(jì)算,最多每次跳躍不超過S格(S<= 6),跳躍的過程中如果跳到梯子的下端點(diǎn)或者蟲洞的上端點(diǎn)就會被直接傳送到另一端,并且每次跳躍只能從小的點(diǎn)跳到大的點(diǎn)(蟲洞是個(gè)例外),求從0W的最短距離。

            A-1

                   題解:

                          離散化 + SPFA。

                   將所有梯子和蟲洞的兩端點(diǎn)、0W以及他們往前往后S步以內(nèi)的數(shù)全部記錄下來,梯子和蟲洞有PP <= 40)個(gè),加上起點(diǎn)終點(diǎn),總共82個(gè)點(diǎn),算上前后各六步,總共82 * 13 = 1066個(gè)點(diǎn),然后將這些點(diǎn)排序后離散化,最后就是要構(gòu)建一個(gè)網(wǎng)絡(luò)圖,通過網(wǎng)絡(luò)求0W的最短路,最短路可以用SPFA求解。

                   談?wù)劷▓D的過程,對于任意兩個(gè)點(diǎn),他們之間必定可以連一條邊,然后有一個(gè)步數(shù)表示邊的權(quán)值(這里的步數(shù)也可能是正無窮,也即永遠(yuǎn)都無法到達(dá))。

                   對于任意兩個(gè)點(diǎn)(u, v),他們的步數(shù)w(u, v)(邊權(quán))我們做如下討論(這里的uv是離散化后的點(diǎn)):

                   1)如果u是梯子的下端點(diǎn),v是梯子的上端點(diǎn) 或者 u是蟲洞的上端點(diǎn),v是蟲洞的下端點(diǎn),那么w(u, v) = 0,否則進(jìn)入2)的判斷;

            2)如果u的編號大于vw(u, v) = inf,表示永遠(yuǎn)不可達(dá),因?yàn)槟炒翁S只能從小的點(diǎn)跳到大的點(diǎn),否則進(jìn)入3)的判斷;

            3)如果u的實(shí)際位置和v的實(shí)際位置差值小于等于S,則w(u, v) = 1

            4)檢查uv之間是否有蟲洞的上端點(diǎn)或者梯子的下端點(diǎn),之后將這兩種點(diǎn)稱為X點(diǎn)

            a)如果有,判斷他們是否連續(xù),

            i) 如果不連續(xù)w(u, v) = inf(這一步這么做是為了簡單化,試想一下,如果X點(diǎn)不是全部連續(xù),說明u可以先跳到他們中間的某個(gè)非X的點(diǎn),然后再跳到v點(diǎn),這一步是通過SPFA來實(shí)現(xiàn)迭代的,建邊的時(shí)候可以不考慮)。

            ii)如果連續(xù),判斷他們連續(xù)的格子的數(shù)目,如果大于等于S說明這個(gè)連續(xù)的塊必定跳不過去,所以w(u, v) = inf,否則可以先跳到最先的一個(gè)X點(diǎn)的前面一個(gè)點(diǎn),然后經(jīng)過一步S跳躍將這個(gè)連續(xù)塊跳過去,再跳到v。

                          b)如果沒有X點(diǎn),那么直接從u點(diǎn)跳到v點(diǎn)。

                   這里我們需要計(jì)算從a點(diǎn)跳到b點(diǎn)不考慮蟲洞和梯子的最短距離,可以貪心的跳,每次往大的跳,直到剩余格子不足S格,即(b-a + S-1) / S b-aS求商的上整)。

                   邊建立完成就可以利用廣搜求解0-W的最短路了。

             

            B. Gnome Sequencing
                   
            PKU 3913 http://poj.org/problem?id=3913

                   水題,判斷三個(gè)數(shù)是全遞增還是全遞減還是無序。

             

            C. DuLL
                   
            PKU 3914 http://poj.org/problem?id=3914

                   題意:給定一些dll文件和它占用的內(nèi)存空間,以及一些可執(zhí)行程序占用的內(nèi)存空間和它依賴的dll文件,程序以進(jìn)程為單位,兩個(gè)相同的程序可能有不同的進(jìn)程,進(jìn)行一些下列的操作:

                   1)某個(gè)程序運(yùn)行的時(shí)候需要它依賴的dll文件也加載到內(nèi)存中,多個(gè)程序可以共用一個(gè)dll文件;

                   2)某個(gè)程序退出的時(shí)候,如果它所依賴的dll文件沒有其它程序使用,需要釋放這段內(nèi)存空間;

                   給定一系列的運(yùn)行進(jìn)程,求某個(gè)時(shí)刻的最大內(nèi)存占用。

             

                   題解:HASH的簡單應(yīng)用。

                   初始化內(nèi)存占用V = 0,

                   對于給定的輸入進(jìn)程:

                   1)如果是新運(yùn)行的進(jìn)程,將V加上這個(gè)進(jìn)程的內(nèi)存占用,并將它所有依賴的dll文件檢查一遍,如果引用計(jì)數(shù)為0,則將對應(yīng)dll文件的內(nèi)存累加到V上,引用計(jì)數(shù)+1

                   2)如果是退出進(jìn)程,將V減去這個(gè)進(jìn)程的內(nèi)存占用,并將它所有依賴的dll文件檢查一遍,如果引用計(jì)數(shù)為1,則用V減去對應(yīng)dll文件的占用量,引用計(jì)數(shù)-1;

                   每次操作記錄最大的V就是最后的答案。

            D. Black Vienna
                   
            PKU 3915 http://poj.org/problem?id=3915

                   題意:三個(gè)人,每個(gè)人五張牌,互相不知道對方的牌,還有額外的三張牌放在一邊(所有牌編號為A - R)。每一輪,由 (i-1)%3+1 (1 <= i <= 15) 號玩家進(jìn)行發(fā)問,問Ai  (1 <= Ai <= 3) 號玩家XYZ(代表任意三個(gè)牌號)三張牌中有多少張?jiān)谒稚?,然后他回?/span>Bi (0 <= Bi <= 3),問經(jīng)過多少輪之后有某位玩家知道 額外 的那三張牌是什么。

                  題解:dfs枚舉 + 剪枝。

                   首先枚舉到某個(gè)詢問i的時(shí)候玩家j能夠猜出的那三張牌的情況,如果枚舉完所有情況最后確定只有一個(gè)解滿足條件的時(shí)候,那個(gè)詢問的編號i就是答案了。

                   類似IDA*的思路,先枚舉詢問最大深度,如果到達(dá)那個(gè)詢問不能確定額外的那三張牌或者有很多種情況,那么說明還需要更多的詢問,迭代深度繼續(xù)枚舉。

                   對于某個(gè)詢問i,找到詢問的那三張牌中已經(jīng)是Ai號選手的數(shù)量ansCnt,以及尚未確定牌的歸屬的牌的數(shù)量xCnt,如果已經(jīng)確定位置的牌數(shù)量 大于 實(shí)際他回答的數(shù)量(ansCnt  >  Bi)或者 尚未確定位置的牌數(shù)量 + 已經(jīng)確定為他的牌數(shù)量 小于 實(shí)際他回答的數(shù)量(ansCnt + xCnt < Bi)都是不合理的情況,剪枝,不用繼續(xù)往下搜索;

                   否則,將(Bi - ansCnt)張牌分配給Ai,(xCnt - (Bi - ansCnt))張牌分配給其它兩位玩家以及額外的那一堆,這里需要用到嵌套dfs枚舉,枚舉完后進(jìn)入下一個(gè)詢問的枚舉,每次詢問的時(shí)候可以有幾個(gè)剪枝:

                   1)如果某個(gè)階段某個(gè)人的牌數(shù)超過5張;

                   2)枚舉的解的數(shù)量超過2個(gè);

                   3) 對于一次完全枚舉,枚舉完所有詢問后還是有無法確定三張額外的牌的情況;

                  

            E. Duplicate Removal
                   
            PKU 3916 http://poj.org/problem?id=3916

                   水題,對輸入的元素進(jìn)行連續(xù)判重輸出。

             

            F. Rock, Paper, Scissors
                   
            PKU 3917 http://poj.org/problem?id=3917

                   水題,剪刀石頭布!O_o

             

            G. A to Z Numerals
                   
            PKU 3918 http://poj.org/problem?id=3918

                   題意:復(fù)雜模擬。(沒做出來,#-_-# 樣例的98是怎么出來的呀!!?。?/span>

             

            H. Cell Towers 
                   
            PKU 3919 http://poj.org/problem?id=3919

                   題意:給出一條曲折的連續(xù)線段,曲線從起點(diǎn)開始每經(jīng)過一個(gè)長度為1的單位會放置一個(gè)守衛(wèi)K,在曲線以外的某些地方會有T(T <= 10)個(gè)信號發(fā)射器,用AB、C...來表示,每個(gè)信號發(fā)射器有它的信號強(qiáng)度Pi,每個(gè)信號發(fā)射器到守衛(wèi)K的距離如果是D,那么它能接收到的信號值為Pi / D2的最近整數(shù),并且對于守衛(wèi)K,它只會接收最大的信號值,如果有多個(gè)發(fā)射器對于K的信號值相同,那么選擇字典序最小的發(fā)射器。需要求是一些守衛(wèi)集合,這些守衛(wèi)分別和它的前一個(gè)守衛(wèi)所接收的信號發(fā)射器不一樣。

                   題解:計(jì)算幾何、向量的簡單應(yīng)用。

                   對于每條射線,終點(diǎn)減去起點(diǎn),再單位化后就可以得到這條射線的單位向量,利用這一點(diǎn)可以很簡單的將所有守衛(wèi)的坐標(biāo)求出來,然后對于每個(gè)守衛(wèi)判斷接收的是哪個(gè)發(fā)射器,判斷和之前那個(gè)守衛(wèi)是否相同即可。

                   需要注意的是最后一個(gè)守衛(wèi),當(dāng)和上一個(gè)守衛(wèi)距離小于0.5的時(shí)候不會建立新的守衛(wèi)。

             

            I. RIPOFF
                   
            PKU 3920 http://poj.org/problem?id=3920

                   題意:給定N(N <= 200)個(gè)數(shù)的一維數(shù)組A,取不大于T+2個(gè)數(shù),每相鄰兩個(gè)數(shù)之間的下標(biāo)不大于S,問最大的取值總和(0個(gè)和第N+1個(gè)數(shù)必取,且權(quán)值為0)。

                   題解:動(dòng)態(tài)規(guī)劃。

                   DP[i][j] 表示第j個(gè)數(shù)取 A[i]的最大值,那么狀態(tài)轉(zhuǎn)移方程可以表示為:

                   DP[i][j] = max{ DP[k][j-1] + A[i],  i > k > i-1-S && k >= 0};

                   特殊的,DP[0][0] = 0,其他的DP[i][j] 都初始化為INF;

                   最后計(jì)算出的DP[N+1][i]中的最大值就是答案了。

                   

            posted on 2014-05-25 20:33 英雄哪里出來 閱讀(613) 評論(0)  編輯 收藏 引用 所屬分類: 區(qū)域賽 解題報(bào)告

            精品久久久久久国产潘金莲| 天天久久狠狠色综合| 伊人热热久久原色播放www| 久久婷婷五月综合97色直播| 久久精品国产亚洲一区二区三区| 久久国产热这里只有精品| 伊人色综合久久天天人守人婷| 亚洲va久久久久| 久久精品aⅴ无码中文字字幕重口| 99久久这里只有精品| 久久亚洲国产成人影院网站| 狠狠综合久久AV一区二区三区| 国产欧美一区二区久久| 国产亚洲精午夜久久久久久| 久久久这里有精品| 99久久综合国产精品二区| 欧美精品福利视频一区二区三区久久久精品 | A狠狠久久蜜臀婷色中文网| 久久综合久久综合九色| 2021久久精品免费观看| 久久精品一区二区| 日韩AV无码久久一区二区| 久久国产免费直播| 嫩草影院久久99| 国内精品久久久久久99蜜桃| 久久人搡人人玩人妻精品首页 | 亚洲精品美女久久777777| 久久精品国产一区| 精品熟女少妇a∨免费久久| 久久福利资源国产精品999| 国产一区二区精品久久凹凸| 国产欧美久久久精品| 久久久久亚洲AV无码专区首JN | 久久亚洲AV成人无码| 99久久精品免费观看国产| 国内精品久久久久影院优| 日日噜噜夜夜狠狠久久丁香五月| 久久久国产视频| 777午夜精品久久av蜜臀| 久久人人爽人人爽人人片AV麻烦| 内射无码专区久久亚洲|