在埃森哲,員工培訓是最看重的內容,最近一年,我們投入了 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
25 45 3
2 54 2
1 310 4 3 10 5
3 31 3
2 11 10 1
112
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分,以此類推,但每個人每場考試的排名不會相同。現在想知道,剩下的最後一場考試結束後,有多少人有可能成...