第十六屆金馬五校 B

2021-08-18 21:16:22 字數 1566 閱讀 5834

在埃森哲,員工培訓是最看重的內容,最近一年,我們投入了 9.41 億美元用於員工培訓和職業發展。截至 2018 財年末,我們會在全球範圍內設立 100 所互聯課堂,將互動科技與創新內容有機結合起來。按崗培訓,按需定製,隨時隨地,本土化,區域化,虛擬化的培訓會讓你快速取得成長。小埃希望能通過培訓學習更多acm 相關的知識,他在培訓中碰到了這樣乙個問題,

給定一棵

n個節點的樹,並且根節點的編號為

p,第i個節點有屬性值

vali, 定義

f(i): 在以

i為根的子樹中,屬性值是

vali的合約數的節點個數。y 是 x 的合約數是指 y 是合數且 y 是 x 的約數。小埃想知道

1000000007取模後的結果

.

輸入測試組數t,每組資料,輸入n+1行整數,第一行為n和p,1<=n<=20000, 1<=p<=n, 接下來n-1行,每行兩個整數u和v,表示u和v之間有一條邊。第n+1行輸入n個整數val1, val2,…, valn,其中1<=vali

<=10000,1<=i<=n.

對於每組資料,輸出一行,包含1個整數, 表示1000000007取模後的結果

示例1

2

5 45 3

2 54 2

1 310 4 3 10 5

3 31 3

2 11 10 1

11

2

n>=10000的有20組測試資料
題解:首先預處理1-n裡的每個數的合約數,複雜度o(n*sqrt(n)), 然後根據dfs序記錄目前為止每個數出現的次數,第一次到這個節點i時候先f[i]先減去他之前合約數出現的總次數,再次回溯的時候再次加上他合數出現的次數,兩次得到的即為f[i].

#include using namespace std;

typedef long long ll;

const int n = 20100;

vectorg[n];

int val[n];

bool isprime[n];

vectorf[n];

int cnt[n], f[n];

ll res;

const ll mod = 1e9 + 7;

void init()}}

for(int i = 4;i <= 10000;i ++) }}

}void dfs(int u, int par)

cnt[val[u]] ++;

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

for(int i = 0;i < f[val[u]].size();i ++)

res += f[u] * 1ll * u;

res %= mod;

}int main()

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

dfs(p,-1);

printf("%lld\n", res);

}return 0;

}

十六屆金馬五校 I 二數

我們把十進位制下每一位都是偶數的數字叫做 二數 小埃表示自己很聰明,最近他不僅能夠從小數到大 2,3,4,5.也學會了從大數到小 100,99,98.他想知道從乙個數開始數最少的數就得到乙個二數。但是聰明的小森已經偷偷在心裡算好了小埃會數到哪個二數,請你求出他要數到哪個數吧。換句話說,給定乙個十進位...

第十六周 問題 B 有相同數字?

問題及 03.all right reserved 04.檔名 有相同數字?05.作者 童宇 06.完成日期 2014年12月5日 07.版本號v1.0 08.問題描述 輸入兩個陣列中要存放的元素個數及元素值 不超過50個 判斷這兩個陣列中是否有相同的數字。09.輸入描述 共有兩組數。每組數包括 這...

SWJTU第十六屆 ACM「新秀杯」網路預選賽題解

a 卷 描述眾所周知,資訊學院是個卷怪聚集的地方,大佬們經常研究一場考試結束後自己是否能拿第一名。參與排名的共有n位同學,每個同學的當前總分為a i。在考試結束後,第一名會得到n分,第二名會得到n 1分,以此類推,但每個人每場考試的排名不會相同。現在想知道,剩下的最後一場考試結束後,有多少人有可能成...