青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 97, 文章 - 22, 評論 - 81, 引用 - 0
數據加載中……

SGU 100 - 109 解題報告

100 A+B                                                測試題
101 Domino                                           圖論:歐拉回路
102 Coprimes                                        數論:歐拉函數
103 Traffic Lights                                  搜索:廣度優先搜索
104 Little shop of flowers                     動態規劃:二維背包
105 Div 3                                               數學題
106 The equation                                  數論:擴展歐幾里得
107 987654321 problem                       搜索:深度優先搜索
108 Self-numbers 2                               位壓縮 + 二分枚舉
109 Magic of David Copperfield II        模擬題


100 A+B

      測試題

101 Domino

      歐拉回路判定(度數判定+并查集) +  Fleury算法 + 無向圖強聯通判橋

       
      題意:給定N個多米諾骨牌,每個骨牌兩端分別是兩個06的數字,問能不能通過一種方法將所有骨牌排列起來,并且相鄰的骨牌的數字相同,(骨牌可進行翻轉),如果存在,要求輸出路徑。

      題解:這題的模型是經典的歐拉路問題,首先要判斷這個圖是否存在歐拉路徑,對于連通的無向圖G有歐拉路徑的充要條件是:G中奇度數頂點(連接的邊數量為奇數的頂點)的數目等于0或者2

    判是否連通,可以通過并查集或者dfs遍歷圖來解決。由于頂點只有7個,并查集集合很小,不需要壓縮路徑。奇度數頂點只需要記錄一個數組,掃描一次即可。

       如果是一個連通圖,并且奇度數的個數等于02,那么可用Fleury算法求解歐拉回路。

     傳統求歐拉回路的算法為Fleury算法:

(1) 任取v0屬于v(G),P0=v0;

(2) Pi=v0e1v1e2…eivi已經遍歷,按下面方法來從E(G)-{e1,e2,…..ei}中任取ei+1 滿足:

  (a): ei+1vi相關聯:

  (b): 除非無別的邊可供遍歷,否則ei+1不應該為Gi=G-{e1,e2,….ei}中的橋.

(3) (2)不能再進行時,算法停止.

 

由于這題不一定有回路,所以第(1)步需要稍作修改。

(1) 取任意一個奇度數點v0屬于v(G), P0=v0 (如果沒有,則任意取);

(2) Pi=v0e1v1e2…eivi已經遍歷,按下面方法來從E(G)-{e1,e2,…..ei}中任取ei+1 滿足:

  (a): ei+1vi相關聯:

  (b): 除非無別的邊可供遍歷, 否則ei+1不應該為Gi=G-{e1,e2,….ei}中的橋.

(3) (2)不能再進行時,算法停止.

 

具體做法就是:

(1) 不斷從剩余的邊集合中取邊,直到所有邊取遍,路徑也就找出來了。

(2) 將當前的剩余邊復制一份(反向邊),目的是將無向圖變為有向圖,然后從P0開始進行一次DFS, u = P0, 并且標記它為根結點root

(3) 記錄u的時間戳dfn[u]以及最小時間戳low[u]為當前時間time(全局計時變量)

(4) 對于u的相鄰邊(u, v):

  (a) 如果vu的父親,并且是u第一次訪問到v,則忽略;

  (b) 如果v未曾被訪問,則(u, v)為一條前向邊(樹邊),訪問v, 進入(3), 訪問完畢后:

       (i)如果v的最小時間戳low[v]小于等于u的最小時間戳low[u],那么更新low[u] low[v],說明v可以訪問到u的祖先結點,即存在環。

    (ii)否則,說明v以及它的子孫沒有向u的后向邊,則表明(u, v)是一條割邊,即橋,將它記錄到cutE集合中。

  (c) 如果v已經被訪問過,更新u的最小時間戳low[u] min( low[u], dfn[v] )

(5) P0的鄰接邊中取出一條不是cutE(割邊)中的邊E,如果所有鄰接邊都在割邊集中,那么隨便取一條鄰接邊E

(6) 從原圖中刪除邊E(P0, v),更新P0 = v,重復(1)直到所有的邊都被篩選出來。

102 Coprimes

      歐拉函數

      題意:給定N,求小于等于N并和N互素的數的個數。

      題解:歐拉函數。

      n = p1e1 p2e2 ... pnen (pi 為素數)

      那么小于n并且和n互素的數的個數為f = (p1-1)p1(e1-1) * (p2-1)p2(e2-1)*...* (pn-1) pn(en-1)


 
103 Traffic Lights

    貪心 + BFS

      
    題意:給定一個無向圖G(V, E),圖上的頂點Vi會變色(經過Tib時間變成藍色,經過Tip時間變成紫色,循環往復),只有當兩個頂點的顏色一樣的時候,它們之間的路才能通行,通行的邊上時間各不相同,問從起點到終點的最小時間。

      題解:貪心式的廣搜。可以這樣考慮,由于任意兩個頂點之間的連通性取決于時間,因為時間不同,頂點顏色不同,導致本來 連通的邊會變成不連通(當然,本來就不連通的邊,也不會因為頂點顏色相同的那一刻變得連通),所以如果假設時間確定的情況下,我們是可以知道這個圖的連通性的;還有一點,當我們來到一個頂點后,可以選擇等待,并且等待的原因只有兩個:

     1) 讓當前頂點變色

     2) 讓和當前頂點連通的點變色

    好讓圖的連通性變化,可以擴展更多的點。

     對于每個結點需要計算兩個輔助函數:

     1、根據某個時間T計算當前結點的顏色。

     2、在當前時間T基礎上計算出下一次變換顏色 的時間點。

 

     有了這兩個函數就可以進行貪心式搜索了。

     1)起點進隊。

     2)彈出隊列首的一個元素,擴展它的鄰接表。

     3)對于當前點u和與u連通的點v,利用1 判斷它們在 當前時間 的信號燈顏色是否相同。

        a) 如果相同,則判斷到下個點所用的時間是否最少(可能之前已經去過那個點),如果比之前優,入隊。

        b) 如果不同,利用2 計算 當前點 下個點 最近的一次變換顏色的時間(這就是貪心所在了)。

            i) 如果兩者時間相同,繼續b,直到反復進行兩次還是沒找到,那么說明永遠不可達(因為一共就兩個顏色,如果他們經            過兩次變換顏色還是一致,那絕對是真愛...)。

            ii) 如果時間不相同,取小的那個時間就是要等待的最近時間點,進入a) 的判斷。

      4)搜索完畢,輸出結果。
    這題需要保存路徑,所以在每個結點上需要保存一個前驅結點,一次迭代就能把路徑逆序求出來了。

 

104 Little shop of flowers

    動態規劃

      
    題意:在一個N*M的二維矩陣aN個數之和保持最大,并且每行只能取一個,第i行取的數的列號j一定要大于i-1行的。

       題解:用dp[i][j]保存i*j這個子矩陣的最優值。

    那么狀態轉移方程為:

 

       a) i == 0

         i)  j == 0 (0,0)這個格子必須取, dp[i][j] = a[0][0];

         ii)  j != 0  dp[i][j] = max(a[i][j], dp[i][j-1]); (要么取當前這個格子,要么取前面某次的最優值)

      b) i != 0

         dp[i][j] = max( dp[i-1][j-1] + a[i][j], dp[i][j-1]); (當前格取與不取兩種情況的大者)

      dp[n-1][m-1] 就是最后要求的答案,需要保存路徑,每次狀態轉移的時候用一個數組將當前結點的前驅保存下來即可。


105 Div 3

      規律題

      題意:給定1, 12, 123, 1234, ..., 12345678910, ...這個序列的前N(N < 2^31)項,求其中能被3整除的數的個數。

      題解:數學歸納法。
       n % 3 == 2 時 2 * (n / 3) + 1 否則 2 * (n / 3)


106 The equation

      擴展歐幾里得 + 區間求交

       題意:ax + by + c = 0  (x1<=x<=x2,   y1<=y<=y2) 求滿足情況的(x,y)的解數。

       題解:首先對于ab分別為零的情況進行特殊判斷:

      a = 0

            b = 0

               c  = 0

                  恒等式,方程解 (x2 - x1 + 1) * (y2 - y1 + 1)

               c != 0

                  無解

            b != 0

                  b*y + c = 0  ->  y=-c/b

                  如果c % b == 0并且y1 <= -c/b && -c/b <= y2

                        方程解 (x2 - x1 + 1)

                    否則

                        無解

      a != 0

            b = 0

                  a*x + c = 0  ->  x=-c/a

                  如果c % a == 0并且x1 <= -c/a && -c/a <= x2

                        方程解 (y2 - y1 + 1)

                  否則

                        無解

      否則當 a b 均不為0時,可采用擴展歐幾里得求方程的一個可行解, 即線性同余方程:

         ax + by = -c

         如果 c | GCD(a, b),則方程有解,否則無解。

         c' = c / GCD(a, b)

         通過擴展歐幾里得求得方程 ax + by = 1 的一個可行解 (x, y)

         那么ax + by = -c的解則是 (x*(-c'), y*(-c'))

         x 的解集合可以表示為 { X = x + k1 * b }

         y 的解集合可以表示為 { Y = y + k2 * a }

         Y = (-c - a * X) / b,于是有:
                   x1 <= x + k1 * b <= x2

                   y1 <=  (-C-A*x)/B - A*k1 <= y2
      問題轉化成了兩個關于k1的不等式求可行解的問題,可以轉化成區間求交。得到的k1的可行解就是最后的答案個數,這里的k1為任意整數,所以在不等式判斷左右區間的時候需要對左區間進行上取整,右區間進行下取整。

注意:在使用擴展歐幾里得求解的時候,得到的xmod b,否則在后面的乘法計算中可能導致值很大而超過64位整數。

 107 987654321 problem

      深搜 + 排列組合

       題意:N位數中平方的最后幾位等于987654321的數的個數。

       題解:利用dfs從最后面一位digit開始枚舉0-9,模擬相乘后對應位的余數,如果和987654321中對應位不相符則不進行下一步搜索,枚舉完后發現九位數的答案為8個解,小于9位數的解為0

       假設xxxxxxxxx 平方的后九位是987654321,那么對于N=14位數的答案為[A-B]這個區間中的所有數,那么根據乘法原理,N位數解的個數就是 9*10^(N - 10) * 8

      A = 10000xxxxxxxxx

      B = 99999xxxxxxxxx

108 Self-numbers 2

      二進制位壓縮 + 二分查找


      題意:將一個數N的所有位數相加再加上本身可以得到一個數N',如果一個數不能通過這種方式得到,那么它稱為self-number,需要求N = 10^7以下的第Kself-number以及小于Nself-number的總數。

      題解:基本思路是用一個10000000的數組標記對應的數是否是self-number

遍歷i 屬于 [1,10000000]。如果iself-number,則模擬生成它的下一個數,標記那個數為非self-number,以此類推,直到遇到下一個非self-number。遍歷完畢,即可得到所有的self-number標記數組。

       這樣做之后發現內存開銷太大,不符合本題 4096kb 的空間需求。

于是可以稍微進行一些空間上的優化,因為標記數組只需要標記是或不是,所以可以采用二進制位壓縮。

一個32位的數二進制有32個標志位

00000000 00000000 00000000 00000000

理論上,它可以記錄 0-31 是否是self-number,例如1 3 5 7 9 20 31self-number,則可以用一個數來儲存,即:

10000000 00010000 00000010 10101010

(右數為低位,左數為高位,從右往左分別表示 0 - 31是否是 self-number 1表示是,0表示否)

預處理數組的大小為 ceil(10000000/32),比原先的數組空間上壓縮了32倍。

       解決本題還需要一個輔助數組FF[i]表示 [0, (i+1)*32 - 1] 這個區間內 self-number 的個數,可以通過一次性的掃描保存下來,這里涉及到求一個數中1的個數,因為計算量就一次,所以隨便采用什么辦法都行。

       然后就可以通過這個輔助數組求出小于等于Nself-number的個數。因為輔助數組的有序性,可以采用二分查找來找到第Kself-number的值。


109 Magic of David Copperfield II
      模擬 + 遞歸


       
題意:有這么一個游戲,對于一個N*N的拼盤,一開始手指放在1上,移動K1次,然后移除M1塊方塊(移除的時候手指不能在移除的方塊上)。然后手指再移動K2次,每次移動不能進入已經移除的方塊上,繼續移除M2塊方塊,以此往復,知道最后手指在某個方塊上,并且沒有其他方塊,題目就是要你模擬這個過程。

       題解:基本思路是當N為奇數的時候可以轉化成N-2的情況求解,當N為偶數的時候可以轉化為N-1的情況求解。

             對于偶數的情況:

1   2  3  4

5   6  7  8

9  10  11 12

13  14  15 16

 

      即上面這個矩陣可以先將 139 移除, 然后將24513移除,這樣就轉化成了

 

6  7  8

10  11 12

14  15 16

 

      這個子矩陣,也就是 3X3 的情況了。

             對于奇數的情況:

       可以先將最外層的包邊移除,這樣就可以轉化成N-2的子矩陣求解了。

       至于K1為大于N的最小奇數,Ki - Ki-1 = 2,這樣就能保證當N = 100的時候 Ke = 299 < 300 了。注意下標的處理就可以了。


posted on 2014-06-10 13:43 英雄哪里出來 閱讀(1607) 評論(0)  編輯 收藏 引用 所屬分類: Sgu 題解

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品大片wwwwww| 欧美区亚洲区| 在线播放国产一区中文字幕剧情欧美| 羞羞视频在线观看欧美| 亚洲女优在线| 国内精品**久久毛片app| 久久视频一区二区| 免费黄网站欧美| 日韩一级精品| 亚洲香蕉网站| 好吊色欧美一区二区三区四区| 久久在线观看视频| 欧美精品久久久久久久免费观看| 夜夜狂射影院欧美极品| 亚洲伊人伊色伊影伊综合网| 国产亚洲人成a一在线v站| 欧美成人亚洲| 欧美日韩精品中文字幕| 久久国产精品网站| 欧美韩日一区二区三区| 亚洲综合精品| 免费欧美网站| 午夜精品久久久久久久99水蜜桃| 久久国产精品99久久久久久老狼| 亚洲免费福利视频| 欧美亚洲视频在线看网址| 亚洲日本精品国产第一区| 一区二区三区视频在线播放| 一区二区亚洲精品| 亚洲婷婷综合色高清在线| 悠悠资源网久久精品| 一区二区不卡在线视频 午夜欧美不卡'| 国产亚洲电影| 亚洲精品国久久99热| 国产视频一区在线观看一区免费| 亚洲国产女人aaa毛片在线| 国产精品一区亚洲| 亚洲人成人77777线观看| 国产无遮挡一区二区三区毛片日本| 亚洲国产欧美一区二区三区久久| 国产三级欧美三级日产三级99| 欧美黄色一级视频| 国产在线拍揄自揄视频不卡99| 日韩午夜av| 亚洲国产一区二区a毛片| 性色av一区二区三区在线观看| 一级日韩一区在线观看| 久久免费视频在线观看| 欧美一区二区三区四区高清| 欧美三级在线视频| 亚洲国产精品成人精品| 在线观看亚洲a| 欧美在线观看一二区| 午夜精品一区二区在线观看| 欧美欧美天天天天操| 欧美激情按摩在线| 亚洲高清视频在线观看| 欧美一级大片在线观看| 久久成人精品电影| 国产精品久久久久久户外露出| 亚洲日本国产| 亚洲免费观看高清完整版在线观看| 久久亚洲精品网站| 女同性一区二区三区人了人一| 狠狠干综合网| 久久久夜夜夜| 欧美国产亚洲另类动漫| 亚洲三级观看| 欧美风情在线观看| 亚洲三级电影全部在线观看高清| 亚洲黄色成人久久久| 欧美成人r级一区二区三区| 亚洲国产精品t66y| 夜夜躁日日躁狠狠久久88av| 欧美另类一区二区三区| 一本一本久久a久久精品综合麻豆| 9l国产精品久久久久麻豆| 欧美日韩视频在线一区二区| 日韩网站在线| 欧美在线黄色| 狠狠色丁香久久婷婷综合丁香| 久久久久久免费| 欧美激情精品久久久久久大尺度 | 欧美片第1页综合| 亚洲人成人一区二区在线观看| 99精品久久久| 国产精品日产欧美久久久久| 欧美在线视频不卡| 亚洲第一综合天堂另类专| 一本大道久久a久久精品综合 | 欧美一区二区| 欧美岛国激情| 国产精品99久久久久久久久久久久| 国产精品老牛| 久久久久久婷| 一区二区冒白浆视频| 久久久久国产一区二区| 99riav久久精品riav| 国产精品一区二区三区久久久| 久久琪琪电影院| 99re热这里只有精品免费视频| 久久精品官网| 一片黄亚洲嫩模| 国产一区二区三区不卡在线观看| 蜜桃av一区二区在线观看| 在线视频欧美日韩精品| 噜噜噜噜噜久久久久久91| 亚洲一区二区免费看| 亚洲成人在线免费| 欧美性一二三区| 美国成人直播| 欧美在线在线| 亚洲一区二区三区高清| 欧美激情麻豆| 久久久久免费| 性色av一区二区三区| 夜夜嗨av一区二区三区| 一区二区三区在线视频播放| 国产精品久久久久天堂| 欧美激情第五页| 久久九九久精品国产免费直播| 亚洲午夜视频| 亚洲精品日韩欧美| 欧美国产日韩一区二区三区| 久久久精品免费视频| 亚洲自拍16p| 在线亚洲免费| 一本一本久久a久久精品牛牛影视| 激情校园亚洲| 国产综合色一区二区三区| 欧美性猛交视频| 欧美日本韩国| 欧美理论电影在线播放| 久久综合导航| 久久久亚洲一区| 久久久久国产精品午夜一区| 午夜精品久久久久久久白皮肤 | 亚洲激情网站| 欧美激情成人在线| 欧美成人免费网| 欧美暴力喷水在线| 免费国产自线拍一欧美视频| 久久国产66| 久久久亚洲高清| 久久久久久穴| 老鸭窝亚洲一区二区三区| 久久夜色精品国产| 久久在线视频在线| 女主播福利一区| 欧美国产视频日韩| 亚洲国产专区| 日韩视频在线免费| 亚洲视频观看| 欧美在线视频一区二区| 久久精品水蜜桃av综合天堂| 久久久国产91| 男人的天堂亚洲| 欧美日韩久久不卡| 国产精品久久久999| 国产美女精品在线| 伊人激情综合| 亚洲美女色禁图| 亚洲欧美变态国产另类| 久久精品99| 欧美成人午夜| 一本色道久久综合亚洲精品婷婷| 亚洲一区www| 久久精品日产第一区二区| 你懂的视频欧美| 国产精品毛片大码女人| 国语自产偷拍精品视频偷| 亚洲三级电影全部在线观看高清| 亚洲婷婷在线| 久久久久一区二区三区四区| 欧美激情精品久久久久久变态| 99视频精品| 久久精品一区二区| 欧美日韩精品久久久| 国产精品自在在线| 91久久精品国产91性色tv| 在线中文字幕一区| 久久夜色精品| 一本色道久久综合亚洲精品不| 欧美亚洲免费| 欧美日韩在线一二三| 黑丝一区二区三区| 亚洲一区久久久| 欧美大片一区二区三区| 亚洲综合不卡| 欧美片第1页综合| 国内精品伊人久久久久av一坑| 一区二区三区高清在线观看| 久久伊人精品天天| 亚洲一区二区视频在线| 欧美成人午夜视频| 一区二区三区在线视频免费观看| 亚洲自拍偷拍福利| 最新成人av在线| 久久综合久久久| 国产欧美亚洲视频|