求一顆\(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 ...