多校第一場 hdu4605 離線

2021-06-16 23:45:47 字數 1135 閱讀 6055

題意:給出一棵二叉樹,每個節點都有對應的權值。遊戲規則是:從根節點開始向下「滾」乙個權值為x的物體,到達乙個節點的時候:

如果x=w[i],即權值相等。則該物體停止移動。

如果x如果x>w[i],進入左兒子的概率是1/8,進入右兒子的概率是7/8。

詢問是:乙個權值為x的物體,能夠到達u節點的概率是多少?

每個節點到根節點的路徑都是唯一確定的,我們可以在一遍dfs中,處理掉所有的詢問。

在dfs的過程中,用兩個樹狀陣列儲存正在訪問節點到根節點路徑上所有節點的權值。

#include #include #include #include #include #include #include using namespace std;

const int maxn = 300000 + 10;

vectorg[maxn];

vector> q[maxn];

mapmm;

int n, m, w[maxn], ind[maxn], root;

int c[2][maxn];

pairans[maxn];

inline int lowbit(int t)

inline void add(int pos, int t, int cas) }

inline int sum(int pos, int cas) return s; }

void dfs(int u)

}for(int i = 0; i < g[u].size(); ++i)

}void prework()

scanf("%d", &m);

while(m--)

for(int i = 1; i <= n; ++i) if(ind[i] == 0) root = i;

scanf("%d", &m);

for(int i = 0; i < m; ++i)

int tot = 0;

for(map::iterator it = mm.begin(); it != mm.end(); ++it) it->second = ++tot;

}void solve()

}int main()

return 0;

}

hdu 6299 多校第一場

題意 給出一些字串,重新組合,使括號的匹配數量最多 這道題場上沒能出,當時看了一眼,關於括號的,以為是個dp,就沒有再去做這道題。這道題事實上是個貪心,先把已經匹配好的括號數量統計出來。剩下的括號往兩邊堆,右括號往左邊堆,左括號往右邊堆。然後就是排序。左括號比右括號多的這種情況肯定要排在右括號比左括...

HDU6299(2018多校第一場)

bryce1010模板 兩個字串的排序可以分成四種情況 1 str1左少右多 vs str2 左多右少 str2排在str1前面 2 str1 左多右少 vs str2 左少右多 str1排在str2前面 3 str1 左少右多 vs str2 左少右多 按左括號的數量排序 4 其他情況按右括號的數...

2019HDU多校第一場

1002.operation 傳送 題意 給定乙個長度為 n 的數列,m 次操作,每次操作如下 0 l r 查詢區間 l,r 內若干個數的最大異或和。1 x 給數列末尾新增乙個數 x 資料範圍 1 n,m 5e5,1 a i 2 分析 開始直接考慮用線段樹維護區間線性基的並,然後每次查詢求區間線性基...