Pascal基本程序題集解題報告【看看不后悔】_第1頁
Pascal基本程序題集解題報告【看看不后悔】_第2頁
Pascal基本程序題集解題報告【看看不后悔】_第3頁
Pascal基本程序題集解題報告【看看不后悔】_第4頁
Pascal基本程序題集解題報告【看看不后悔】_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基本程序題集解題報告貪心算法刪數問題首先考慮s=1時的情況,很容易知道如果只刪一個數,那么若各位數字遞增則刪除最后一個數,否則刪除第一個遞減區(qū)間的首字符,這樣刪除便可以得到最小的數。而對于s>1時,我們只需要重復這種操作s次,得到的操作就是所求的最小數。旅行家的預算假設現在在第i站,那么在這站加滿油可以到達的最遠距離是dis[i]+c*d2,如果在這個范圍內存在一個加油站j,它的價格pri[j]<pri[i],那么只要把油加到剛好能到達j就可以了;如果在這個范圍內不存在這樣的加油站,那么就在i加滿油,然后走到盡量遠的加油站j,如果無法走到j,即最近的加油站dis[j]>dis[i]+c*d2,此時無解。線段覆蓋貪心策略為:每次選取線段右端點最小的線段,保留這條線段,并把和這條線段有公共部分的所有線段刪除。重復這個過程,直到任兩條線段之間都沒有公共部分。由于右端點最小,所以保證了所有與這條線段沒有公共部分的線段都在這條線段的右邊,且所有與這條線段有公共部分的線段兩兩之間都有公共部分。由于有公共部分的線段中,最后只能保存一條,顯然右端點越小,對后面的影響越小,這條線段應該保留。背包問題由于每一物品是按重量拿,所以我們每次選取當前單位重量價值最高的放入背包,直到物品取完,或背包裝滿。任務調度遲任務──調度中在規(guī)定期限后完成的任務,試題要求解出最小化遲任務的罰款總和;早任務──調度中在規(guī)定期限前完成的任務,最大化早任務的罰款總和正好對應問題的解;任意一個調度可通過下述方式安排成規(guī)范形式:1.按期限遞增的順序對早任務進行調度。即只要在調度中有兩個分別完成于時間K和K+1的早任務i、j且dj<di,我們就互換i和j的位置,使得任務i在交換后仍然是早的,而任務j被移到更前的位置;2.如果某個早任務X跟在遲任務Y之后,我們可以交換X和Y的位置,使得早任務先于遲任務;任一調度中早任務的集合構成了一個獨立的任務集A,因為A中任務按期限單調遞增的順序進行調度后,沒有一個任務是遲的、且A中期限為t或更早的任務個數小于等于t。顯然A集合為滿足傳遞性質的獨立子集,而問題的解為其中罰款總和最大的一個子集。果子合并很明顯,為了讓總和最小,我們每次應該選取最小的兩對果子將它們搬到一起。射擊競賽統(tǒng)計所有行包含的白格數從還沒有射擊格的行中選出一個白格數最少的檢查所選的行若所選行的白格數為0,則輸出無解;否則從所選行的白格中任選一個作為射擊格,并將與該格同列的另一個白格所處行的白格數減1返回到第2步,直到所有的行都有射擊格。若還有列沒有選射擊格,則在該列任選一白格作為射擊格即可任務安排分為兩步,既是先完成對A機器的安排,然后再對B機器進行安排。我們可以很容易的用貪心法安排對A的操作。應為每一個零件對于A機器來說都是公平的,因此記錄完成當前分配的所有工作后每個機器的完成時間(顯然初始值所有機器為0),接下來依次加入需要完成的工作,找完成時間最小的機器完成當前的工作。而對于B機器的安排就有點麻煩了,因為每臺A機器完成操作的時間不同,不好用貪心。其實可以這樣做,首先我們把它看作是平等的。這樣對于每一個工件,它的B操作會有自己的完成時間,同樣對于每個工件的A操作也會有。于是,我們可以這樣貪心來求得最短時間,A操作中最快完成的與B操作中最慢完成的加起來,A中第二完成的與B中倒數第二完成的加起來,A中第三完成的與B中倒數第三完成的加起來,……最后取最大的就是最短時間。原因很簡單,以最小的配對為例,最小的配最大的才能使其他的配對盡量的短……最小差距首先考慮n為奇數時,顯然我們首先應該讓他們的位數盡量接近,即一個為ndiv2,另一個為ndiv2+1,為了讓差盡量小,所以較大的數我們我們應該取最小的ndiv2+1個數,并以升序排列,較大的數我們應該取剩下的ndiv2個數,并按降序排列。而偶數就不能這樣做,一個顯然的反例就是對于1234,如果按照奇數的方法就應該是43-12=21,顯然31-24=7<21,所以不成立。我們將算法改改,首先枚舉兩個數的最高為,最高位定下來后,再按照奇數的方法來貪心處理剩下的數字,從中取最小的值即可。分治法一元三次方程的解這一題的方法很多,因為精度要求不高的緣故,所以無論二分還是枚舉都可以過,不過在硬枚舉時,步進的精度最好選為0.001,這樣如果出現f(x)f(x+0.001)<=0時,無論解是什么,再取兩位后結果不會變。如果是二分法的話,需要注意的問題就是二分過程中要加修正值、計算時判斷相等關系,然后就是需要考慮精度問題。查找第k大元素利用快排的思想,我們首先將數列以某一個標準值為基準將數分為兩堆,那么根據這個標準值的位置,我們可以確定我們想要的第k大數是在哪一堆中,由此我們可以,遞歸下去,在那一堆中繼續(xù)分治找。其實快排之后直接找第k大元素也可以。麥森數對于2^m-1的位數我們顯然可以利用對數的性質很方便的求出,即為=[lg(2^m)]+1=[m*lg(2)]+1=[m*ln(2)/ln(10)]+1,對于他的末500位可以使用快速乘方實現,即使用二分的思想,即如果求2^n,那么應先求2^(ndiv2),于是最后我們就等效成從2不斷平方(平方過程中不斷調整——乘以2,是否乘以2根據m轉換成2進制后的序列決定),最后的到2^m,減去1即可。逆序對個數首先有一個O(n^2)的算法,即枚舉所有數對,顯然是會超時的。我們可以利用歸并排序的過程,順帶的統(tǒng)計逆序隊的個數。歸并過程中,首先我們將數組分治,分別將他們排序,并統(tǒng)計他們之中的逆序隊的個數,于是剩下要統(tǒng)計的即是一個數在某個數組中,另一個數在另一個數組中的逆序對,這樣由于分治的兩個數組都是有序的,于是如果當前合并兩數組時a[i]>a[j](i為1-mid數組中的元素,j為mid-n數組中的元素),顯然a[i],a[j]為一逆序對,并且a[j]與a[i]后面的所有元素都為逆序對,于是在合并過程中,我們就可以通過O(n)的合并時間,統(tǒng)計跨組的逆序對,于是總算時間為O(nlogn),可以承受。尋找最近點對使用分治思想,我們將平面上的點用一條豎線分為左邊的與右邊的點,分別求出兩點同時在左邊或右邊的最近點對(設他們的最小值為s),然后合并,求兩點分別在左右的最近點對,這兩點一定在離豎線的s范圍之內,將這些點列出來,按y坐標排序,可以證明如果在這些點中存在s’<s,那么其中一個點必至另一個點的臨近7個點中的一個。另外注意的就是,如果分治了只剩45個點了,其實就可以直接O(n^2)枚舉了,這樣其實更快。剔出多于括號四則運算表達式含運算符+-*/(),其優(yōu)先順序由低至高為:+-→*/→()一個括號是否作為多于括號剔出,關鍵是在于括號內優(yōu)先級最低的運算符與左鄰括號或右鄰括號的運算符之間的運算優(yōu)先關系。在處理表達式時我們可以從最低運算符處將表達式分開,分別處理,同時對相應的層進行括號整理,直到處理了最外層的括號為止。剔出多于括號當且僅當N為2的整次冪時,問題才有解,當然解是不唯一的。這樣可以將運動員分成兩組:1,2,…,N/2和N/2+1,N/2+2,…,N。給第一組運動員安排一個比賽日程,得到一個N/2階的方陣A1;同時給第二組的運動員安排一個比賽日程,同樣會得到一個N/2階的一個方陣A2??紤]到比賽的性質,設定第I個運動員在某一天的比賽對手為第K個運動員,則第K個運動員在同一天的比賽對手必然是第I個運動員,即若有A[I,J]=K,則A[K,J]=I。因此原問題的解(一個N階方陣)可以由分解后的兩個子問題的解,合并起來。同時每一個子問題又可以按照上述的二分法分解下去,直至每個組中僅有2個運動員時為止。搜索算法皇后問題極為基本的問題,深度優(yōu)先搜索,當n=13時一般的搜是不行的,需要加上對稱性剪枝。八數碼問題同樣極為簡單,廣度優(yōu)先搜索,必要的話,需要加上hash判重以提高速度。拼圖由于不用旋轉,可以直接往上放,所以直接搜索即可。有兩種搜索策略,一個是對于當前的map搜索第i塊放在哪,另一個是對于當前第一個為方的格子,應該放那一塊;這兩種在事先都應該判斷當前搜索是否可行。另外,后一種搜索方法好像更快。質數方陣首先生成所有5位質數的布爾表(顯然末尾只可能是1379),然后循環(huán),循環(huán)次序如下最后一行,與最后一列(顯然每一個只有4種情況)兩個斜行循環(huán)21,23,31,41,算出43循環(huán)12,算出剩下的埃及分數沒有下界,數的上界也沒有,并且廣搜也行不通,所以就毫不猶豫地使用了DFSID——可變下界深搜。然后就是深搜中的實質性優(yōu)化,關鍵的一點就是確定當前可以填入的分母的最大值,很容易就可以算出,他應該取剩下的分數值的倒數的num-t+1倍(num為當前下界,t為當前搜到的位置)。由于不存在下界問題,再加上一些最優(yōu)性的小剪枝,這一題可以很輕松的解決。字符串變換這題大體上需要用廣搜解決,由于節(jié)點數太多,需要考慮用雙向廣搜,然后就是要注意字符串的處理。有點難度,不過不是思維上的。聰明的打字員這一題是典型的廣搜,只不過可以肯定的是,一般的廣搜肯定是不行的。考慮對規(guī)則的優(yōu)化,總共有6個規(guī)則,首先想到的優(yōu)化就是對于同一位up后不能down、down后不能up,并且left、right不能同時成對出現。這樣一來,我們發(fā)現程序的確快了一點,然而離AC還是差遠了,怎么辦?——考慮對up與down的優(yōu)化:我們發(fā)現,一旦一個數的位置一確定,那么對他的up或者down的操作無論在何時進行都可以(只要在操作過程中光標經過了這個位置)。所以,我們可以先撇開up與down不管,先廣搜一遍,對于每一個節(jié)點的操作只進行另外4種操作,同時只記錄光標經過了那么些位置、每個數的當前位置在那里、以進行的操作數與光標當前位置。最后對于所有可能的節(jié)點加上所需up或down的操作數,取最優(yōu)解即可。這樣做有一個好處,就是廣搜時可用hash標進行判重,我們開始可以用123456代替每一個位置上的數,并且光標經過的位置只會有10種情況(注意它是從1開始移動,根據規(guī)則它只可能有10種情況),于是判重時hash表的size只有6*6!*10=43200,完全可以承受。實際操作時,最后可能到達的節(jié)點總數只有8000多。01序列現在我沒有什么好方法,所以只有搜索。使用深度優(yōu)先搜索,邊搜邊判斷是否滿足要求,為加快速度,可以考慮在判斷長度比較小的序列時將它們對應的01序列轉換為十進制數,以便hash判重。、另外的一個注意之處就是,第一位添1與添0方案數是一樣的。生日蛋糕這一題可以用DP做,不過我認為是一個不明智的做法,因為此舉浪費空間大,而重疊的子問題很少,因該用搜索加以適當的優(yōu)化來解決。首先我們就有兩個直觀的優(yōu)化:切到當前層時表面積比最小的面積大,可以剪枝;如果剩下的體積,比可能切出的最小體積小,最大體積大,剪枝。其實這些就夠了,但是還可以進一步優(yōu)化:對于當前的lefts(剩下的需加上的面積),有Lefts=∑(k=i+1tom)2*Rk*hk>=∑(k=i+1tom)2*Rk^2*hk/Ri=2/Ri*(N-T)=PT為已經是已經使用的體積,W為已經用的面積,S為當前最小的面積,如果P>=S-W那么可以剪枝。圖論算法一筆畫問題判斷依據為:(1)當且僅當一幅圖是相連的(只要你去掉所有度數為0的點)且每個點的度都是偶數,這幅圖有歐拉回路.(2)當且僅當一幅圖是相連的且除兩點外所有的點的度都是偶數.(3)在第二種情況中,那兩個度為奇數的節(jié)點一個為起點,剩下的一個是終點.求路徑時,任取一個起點(本題應該是取編號最小的合法起點),開始下面的步驟如果該點沒有相連的點,就將該點加進路徑中然后返回。如果該點有相連的點,就列一張相連點的表然后遍歷它們直到該點沒有相連的點。(遍歷一個點,刪除一個點)處理當前的點,刪除和這個點相連的邊,在它相鄰的點上重復上面的步驟,把當前這個點加入路徑中。Car的旅行路線主思想就是dijkstra,因為總共最多有100個城市,所以我們就可以建400個點,然后建一個源點與A中點相連,一個匯點與B中點相連,相連的邊權值為0,然后dijkstra求解即可。只不過需要注意的是知道矩形的三個頂點如何求第四個點的問題,這其實很簡單,找到三個點中處于中間的那個點,然后用旁邊兩點的橫縱座標的和減去他的橫縱坐標即可。求割點與橋DFS,NUM[I]記錄訪問到I的時間戳,LOW[I]=MIN{NUM[I],LOW[Q]}存在I-Q的邊且Q不是I的父節(jié)點。然后就可以判斷了,i是割點當i是根節(jié)點且它有2個以上的兒子,或者它不是根節(jié)點且low[q]>=num[q];(i,q)是橋當且僅當low[q]>num[i]。十字繡將正面的邊視為正邊,反面的則視為負邊。用floodfill將由正邊和負邊交替連接的結點組成一個塊。對于每一個塊,其中的所有結點的正邊數目和負邊數目之差的絕對值(定為dep)之后div2后就為這個塊的所需針數。在一個塊中只用一針就可完成,假設該針由v1出發(fā),到vn結束,那么v1到vn中間的點的dep為0,而v1和vn則為1。也就是說塊中的那一針在v1有一個入口,在vn有一個出口,而每一對入口和出口就代表了一針,那么就可以通過dep之和除以2得到所需針數。由此可以拓寬到多針。舞會顯然,這一體應該是求有向圖的強連同分量的個數。求一個有向圖的強連同分量是DFS的經典應用,一般步驟如下:對于圖G,首先進行一次DFS,記下每個節(jié)點搜索過程中的完成時刻;將G中的所有邊反向,得到圖G的轉置,記為Gt;按照第一次DFS中節(jié)點完成時刻的遞減順序考慮圖Gt,對其進行搜索;對于第二次深搜得到的森林,每棵樹各自獨立的成為一強連通分量。休息中的小呆這一題有兩問,第一問即是求圖的最長路徑,不能使用類似dijkstra的算法解決,因為最長路徑不符合dijkstra那種最優(yōu)子結構,應該使用bellman-ford(即對每條邊松弛n輪)。第二問其實就是求所有最長路徑上的所有點,可以考慮以劇情終點為起點做一次最長路徑,只不過起點一開始的dis[s]=-maxlen(maxlen即為第一問的結果),這樣,所有點對應都有兩個值,如果這兩個值加起來=0,那么這個點就應該在第二問中輸出。最有布線問題顯然是求一個圖的最小生成樹,由于每兩點都有一個距離,為一稠密圖,這里最好使用Prime,krukal在此可能效率不高。磁盤碎片整理每個碎片都有一個起始位置與目標位置,從一個不在目標位置上的磁盤碎片開始,一直找下去,可以找到一個環(huán),那么將他們歸位的操作次數應該是環(huán)中節(jié)點數+1。找到所有環(huán),并逐個累加即可。說謊島注意到有可能在所有的話中,一旦某一句話的真假已經確定,那么另一些話就已經確定了??紤]到這種關系,我們發(fā)現其實這是一個圖,對于這一個圖,邊有如下定義:對于兩個問題必須同是同否,那么他們的邊權值就為1;若必須相對立,則為-1;若沒關系則為0。那么我們發(fā)現,對于這個圖,如果他有解,那么設其連通分量數為t,則結果的中數應為2^t,于是剩下的事情就只剩下如何判斷無解了??紤]對這個圖深搜,那么每次從一個未標記的點開始,那么這一次搜得的結果應該為一個兩通分量,并且同時我們可以將它里面所有的點分為兩類。這兩類應該相互對立:一類如果為是,則另一類必為否。所以搜完一遍后,我們要進行檢查,首先檢查兩類是否有交集,然后檢查屬于同一類卻應該相互矛盾的或屬于不同類的卻應該相互關聯的情況。檢查完后,我們就可以計算,不過考慮到t較大,所以應該用高精度。01串問題對于滿足要求的串而言,若num[i]表示串的長度為i的前綴中包含1的個數,那么有0<=num[i+1]-num[i]<=1A1<=num[i+L1]-num[i]<=B1A0<=(i+L0-num[i+L0])-(i-num[i])<=B0有如上關系,我們很快發(fā)現,他就等同于一個差分約束系統(tǒng),對于此圖,如果存在負權回路,那么他就無解,如果不存在,那么求出最短路徑,根據路徑直接構出一組解。具體實現時,用bellman-ford就可以了。海島地圖這是一個典型的flood-fill(即種子填充算法)問題,既可以使用DFS,又可以使用BFS實現,但為了保證不堆棧溢出,我們最好使用BFS。數學問題數的劃分據經典的Ferrers圖像可以知道n拆分為k個整數的拆分數,與n拆分成最大數為k的拆分數相等,于是用遞推的方法:用表示把b做任意剖分,其中最大的一個部分恰好是a的方案總數。用表示把b做任意剖分,其中最大的一個部分不大于a的方案總數。那么,有:。消去,有:。我們可以按照a、b遞增的順序計算的值,這樣在在計算的時候,和都已經得到,故我們只用進行一次簡單的加法運算即可。最后的即為所求。最優(yōu)分解方案為了使最后分解的數的乘積最大,首先我們應該確定n應該分解為幾個數(其實就是n可以分出的最多個數),確定過程就是從2開始以步差為1累加,直到恰好小于n位置(就是找最大數為k,使2+3+…+k=t<n,劃分成的個數應該為k+1);確定下來后,由于n剩下來了一些,所以將這些平均的加到k-2上,由于不能平分,所以應該是先所有數加上(n-t)divk,然后較大的(n-t)modk個數多加一個1。這樣就確定下來了所有的數。我們最后使用單精度將他們乘起來即可。出棧序列統(tǒng)計每一次操作僅有兩種,即壓棧與退棧,這種操作可以對應于一個數的中序遍歷(即向下更深層遍歷與回溯)。顯然對于答案,其實就是一個Cartlan數列,F(n)=C(2n,n)/(n+1)百事世界杯之旅對于要在剩下的i種瓶蓋中收集到一種,買一瓶飲料收集到的概率為(i/n),所以平均應該買(n/i)瓶,所以平均總共要買n(1/1+1/2+1/3+….+1/n)瓶。電子鎖n-1在一起,至少缺少一種開鎖的密碼特征,故不能打開電子鎖,剩下的m-(n-1)個人中的任意一個人到場即可開鎖,所以至少有C(m,m-n+1)種特征。對于任意一個工作人員來說,其余m-1個人中的n-1個人到場,至少缺少一個這個工作人員磁卡上所具有的特征,所以每個人至少有C(m-1,n-1)種開鎖的密碼特征。對于每一種特征的分配方案,其實就是一個C(m,m-n+1)個中選擇C(m-1,n-1)的組合生成。堆塔問題對于這一題我們采用分類計數法,當列數為i時,每一個堆塔方案對應方程:x1+x2+x3+x4+…+xi=n的一個組正整數解,所以此時的方案數為C(n-1,i-1),所以總方案數為:C(n-1,0)+C(n-1,1)+…+C(n-1,n-1)=2^n取數游戲首先模擬取數,我們要做的就是判斷無解的情況。假設某一趟共取m次,那么把每一堂取數中每一次所取的數加起來所對應的二進制數為(11…11)2,其中1的個數為m,而取得的余數一定不大于二進制數(11…11)2,其中1的個數為m,否則可以繼續(xù)取下去。所以一個數經過一趟取數后余下的數最多只能達到他的一半。即第i趟取數后,余下的數不超過k+n/p-k/q,這里的p等于2的i次方,q等于2的i-1次方。顯然所有的余數不會超過k+n/2,所以在取了k+n/2+1趟后尚未取完,那么必有兩趟余數相同,即永遠也取不完了。球迷購票其實這一與出棧序列統(tǒng)計類似,其實就是一個從(0,0)走到(m,n),每次只能向右或上走單位1距離,其中向上走的布數應非嚴格大于向右走的步數的總路徑數。這個數是一個很經典的組合數,即為C(m+n,n)-C(m+n,n-1)。Fibonacci公約數可以證明GCD(Fn,Fm)=Fgcd(m,n)(只用證F(n)整除F(k*n))。傳球問題與磁盤碎片整理相似,我們首先找環(huán),每個環(huán)所需的歸位次數為環(huán)所包含節(jié)點數-1。對于總時間,我們單獨的考慮每個環(huán),最后取最大值即可。若包含節(jié)點數為1,那么需時間0;若包含節(jié)點數2,那么需時間1;若包含節(jié)點數大于2,我們可以花時間1,將此環(huán)拆成多個長度為1與2的環(huán),然后再交換,所以用時為2。約瑟夫問題顯然答案為2*(n-2^a)+1,a為使2^a不大于n的最大整數。青蛙過河有f[i,j]表示i片葉子,j塊石頭最多將青蛙送到對岸的個數,那么有f[i,j]=2*f[i-1,j],其原因與漢諾塔的原理相類似(將第i個石頭看作是對岸就可以了)。而f[0,j]=j+1,應為只有將j個石頭占滿,然后將第j+1個青蛙放到對岸,那么所有的j+1個青蛙就可以過河了。于是又f[i,j]:=(j+1)*2^n,答案即為(m+1)*2^n。棋盤游戲通過找規(guī)律我們發(fā)現:1.無論移動什么棋子,以每一次換顏色為界,每次移動數目為1,2,3……n,n,n……,3,2,12.第一次移動白色棋子,最后一次也是的。數據結構火車棧有一個最基本的方法,即使如果存在進棧時為i<j<k的三元組,其出棧序列為k<i<j,那么肯定它是無解的,其他情況時有解的。于是我們很快就可以得到一個O(n^3)的算法,但是很顯然——TLE。想到Cartlan樹中進棧出棧的對應方法,我們可以按照這棵樹的生成法來檢測出棧序列?!喈斢谝阎豢脴涞闹行虮闅v,判斷一個序列是否為這棵樹的前序遍歷。這是用分治法解決?!@樣就可以解決這一題了。然而,其實有更好更簡單的方法。模擬進棧出棧,在棧頂元素與當前要求出棧的元素相同時我就進行彈棧操作,否則就壓棧。如果無法壓棧,而且無法彈棧,那么就是無解的。如此進行硬性的掃描模擬就夠了,復雜的為O(n)。括號表達式建立一個棧,然后往里面放括號——碰見左括號就進棧,右括號就退棧,如果碰見括號不匹配,或者無法退棧的情況就是無解的。銀河英雄傳說用并查集來解決這一道問題,然而考慮到此題的特殊情況,我們要對并查集的結構進行一定的改進然后再運用到程序中。定義以下幾個量:father[i]表示i現在從屬于哪一艦隊behind[i]表示i現在離艦首的距離dep[i]表示i后面有多少只軍艦于是,我們可以利用路徑壓縮(findfather)的過程同時進行更新dep與behind,對于路徑壓縮我們采用以下過程:functionfind(x:longint):longint;vari,j,f,temp:longint;beginf:=x;whilefather[f]<>fdof:=father[f];i:=x;whilei<>fdobegintemp:=father[i];father[i]:=f;j:=temp;repeatbehind[i]:=behind[i]+behind[j];j:=father[j];untilfather[j]=j;i:=temp;end;find:=f;end;而對于merge操作,我們要做的就是把一方的father指向另一方,同時變更behind與dep:proceduremerge(x,y:longint);varfx,fy:longint;beginfx:=find(x);fy:=find(y);father[father[fx]]:=fy;behind[fx]:=behind[fx]+dep[fy];dep[fy]:=dep[fy]+dep[fx];end;相對于find與merge,count就簡單得多,因為它只需要判斷兩艦是否屬于同一隊,然后兩個behind相減即可:procedurecheck(x,y:longint);varfx,fy:longint;beginfx:=find(x);fy:=find(y);iffx<>fythenwriteln(-1)elsewriteln(abs(behind[x]-behind[y])-1);end;矩形覆蓋

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論