小w的魔術撲克

2021-09-29 06:43:41 字數 971 閱讀 4185

這道題的關鍵,就是將題目轉化為圖論。我們將每張牌的正反兩面的數值連一條邊,可以發現,我們只能在一棵樹中選n-1個點。那麼就意味著,當乙個詢問包含一整棵樹時,這是不可能的(因為是用數值做編號,可以發現乙個點只可能出現在一棵樹中)。

那麼如何實現呢?我們處理出每棵樹的min和max,自然,樹的其他所有節點都會包含在這一區間內。

#include

#include

#include

#include

using

namespace std;

const

int n =

1e5+2;

int n, k, q, minr[n]

, sum, bian, maxx, minn;

bool vis[n]

;vector <

int> g[n]

;void

read

(int

&x)}

void

dfs(

const

int x)

}int

main()

for(

int i =

1; i <= n; i ++

) minr[i]

= n +1;

for(

int i =

1; i <= n; i ++)}

for(

int i = n -

1; i >=

1; i --

)//意義:i+1--minr[i+1]可能被本區間包含,這時minr可以向內更進一步

minr[i]

=min

(minr[i]

, minr[i +1]

);read

(q);

while

(q --

)return0;

}

謝謝!

題解 小w的魔術撲克

題目傳送門 我們將一副牌對應的數連上邊,不難發現當乙個長度為 n nn 的區間裡面有 n nn 條邊時,才能打出順子。所以找出樹來就可以了,用並查集維護一下,dfs出所有的樹來。那包含樹的區間都是no的,我們記錄每個樹的區間,相當於做一次線段覆蓋。name c author lovely xians...

藍橋杯 撲克牌「魔術

小明剛上小學,學會了第乙個撲克牌 魔術 到處給人表演。魔術的內容是這樣的 他手裡握著一疊撲克牌 a,2,j,q,k 一共13張。他先自己精心設計它們的順序,然後正面朝下拿著,開始表演。只見他先從最下面拿一張放到最上面,再從最下面拿一張翻開放桌子上,是a 然後再從最下面拿一張放到最上面,再從最下面拿一...

小W的數字

如果設step n 表示n減到0的最小操作次數,顯然step有單調性。我們設f mx,n 表示把n減到0的最小操作次數,mx表示的是比n最高位還高的那些位的最大值。現在我們可以固定最高位,把剩餘位減到0,也就是遞迴計算,返回二元組 cost,dp 表示操作次數為cost,最終還可以額外減掉乙個dp。...