牛客練習賽96

2022-09-25 07:00:11 字數 1428 閱讀 7734

求一顆\(n\)層的滿\(k\)叉樹,求任意兩點之間距離和等於多少,答案對\(10^9+7\)取模

樹上兩點距離: 沿著最短路徑從u走到v經過的邊的數量

\(n\)層的滿\(k\)叉樹:葉子節點到根的距離是\(n-1\),每個點都有\(k\)個兒子

一行兩個正整數代表\(n,k\)

\(2\le n,k\le 10^6\)

輸出一行乙個數代表答案

輸入

3 3
輸出
216
列舉

考慮每條邊的貢獻,對於同一層的邊的貢獻肯定是相同的,假設共有 \(n\) 層邊,總的節點數為 \(all=1+k+k^2+\dots +k^n\),對於第 \(i\) 層的每一條邊,下面有 \(now=1+k+\dots +k^\) 個點,上面共有 \(all-now\) 個點,則該層的貢獻即為 \(k_i\times now\times (all-now)\)

// problem: 小y的樹

// contest: nowcoder

// url:

// memory limit: 524288 mb

// time limit: 2000 ms

// // powered by cp editor (

// %%%skyqwq

#include #define int long long

#define help

#define pb push_back

#define fi first

#define se second

#define mkp make_pair

using namespace std;

typedef long long ll;

typedef pairpii;

typedef pairpll;

template bool chkmax(t &x, t y)

template bool chkmin(t &x, t y)

template void inline read(t &x)

while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar();

x *= f;

}const int n=2e6+5,mod=1e9+7;

int n,k;

int s[n],a[n];

signed main()

int res=0;

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

res=(res+(s[n]-s[n-i]+mod)%mod*s[n-i]%mod*a[i]%mod)%mod;

cout

}

牛客練習賽9

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...

牛客練習賽15

時間限制 c c 2秒,其他語言4秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 第一次期中考終於結束啦!沃老師是個語文老師,他在評學生的作文成績時,給每位學生的分數都是乙個小於10的非負小數。amy 8.99999999999999999999...

牛客練習賽5

給你n個正整數,n 5,每個正整數大小不超過1000,最初su m 0 sum 0 每次可將su m sum 按順序加上陣列中的數,加完之後可以對sum的數字進行全排列,求最終能達到的最大值。由於n只有5,所以按照題意模擬dfs實現就可以了,注意最後一組也可以按數字進行全排列。d題 include ...