uva1423 巧用拓撲排序

2022-05-15 04:33:10 字數 1376 閱讀 2518

對於乙個序列 a1 a2 ... an 我們可以計算出乙個符號矩陣a, 其中si,j 為 a1+...+aj 的正負號,(連加和大於0則sij=+ 小於0 sij=-  等於0 則sij=0), 根據序列a不難算出上述符號矩陣。你的任務是求解它的「逆問題」 , 及給出乙個符號矩陣,找出乙個對應的序列。輸入保證存在乙個滿足條件的序列,其中每個整數的絕對值均不超過10

解  連續和轉化為字首和之差,設bi=a1+...+ai 規定b0=0 則矩陣中的任意一項都等價於連個bi 相減之後的正負號,例如 , 第x行y列的符號為正號 ax+...+ay>0 by-bx-1>0, 轉化為已知b0,b1,...,bn,的一些大小關係,求他們的值,這個問題通過拓撲排序完成。

#include #include 

#include

#include

#include

using

namespace

std;

const

int inf=50

;char str[150

];vector

same[15

];vector

to[15

];int dgreed[15

];int g[15

];bool use[15

];int ans[15

];void solve(int loc, int

v)int

main()

else

if(str[loc]=='+'

)else

loc++;

}for(int i=0; i1;++i)

g[i]=k; use[k]=true

;

for(int j=0; jj)

}loc=0

;

for(int i=0; i1; ++i)

if(g[i]==0

) ans[

0]=0

;

int v=-1

; solve(

0,0);

for(int i=loc-1; i>=0; --i)

solve(g[i],ans[g[i]]);

}v=1

;

for(int i=loc+1; i<=n; ++i)

solve(g[i],ans[g[i]]);

}for(int i=1; i<=n ;++i)

printf(

"%d%c

",ans[i]-ans[i-1],i==n?'

\n':'');

}return0;

}

view code

142 猴子報數

猴子報數 n個猴子圍坐一圈並按照順時針方向從1到n編號,從第s個猴子開始進行1到m的報數,報數到第m的猴子退出報數,從緊挨它的下乙個猴子重新開始1到m的報數,如此進行下去知道所有的猴子都退出為止。求給出這n個猴子的退出的順序表。輸入有做組測試資料 每一組資料有兩行,第一行輸入n 表示猴子的總數最多為...

演算法導論14 2

本小節介紹了擴充套件資料結構的抽象過程,同時證明了乙個定理 選擇一種基礎資料結構 確定基礎資料結構中要維護的附加資訊 檢驗基礎資料結構上的基本修改操作能否維護附加資訊 設計一些新的操作來應用附加資訊 設 f 是 n 個節點的紅黑樹 t 擴張的屬性,且假設對任一節點 x f 的值僅依賴於節點 x,x....

142 字首統計 AcWing

原題鏈結 trie的基本運用 錯誤思路 將要查詢字首的字串構建字典樹,這樣的結果是每個字串都要重新構建一次樹,並且我們需要預先儲存要匹配字首的單詞,但題目單詞數目沒有講明,所以我們必須將建樹的字串互換.這樣建樹會導致mle 正解思路 將字首建樹,如果達到乙個結點有單詞就 1,如果沒有單詞就跳出 易錯...