1. 程式人生 > 實用技巧 >【東華】201022比賽總結

【東華】201022比賽總結

T1(60)想到了正解,但最後沒有實現,以為思路想錯了,換成了暴力,打了1.5小時

T2(60)暴力,想了個自以為是正解的正解

T3(0)沒時間了……

T1猴猴吃蘋果

題目描述

猴猴最喜歡在樹上玩耍,一天猴猴又跳上了一棵樹,這棵樹有N個蘋果,每個蘋果有一個編號,分別為0~N-1,它們之間由N-1個樹枝相連,猴猴可以從樹枝的一端爬到樹枝的另一端,所以猴猴可以從任意一個蘋果的位置出發爬到任意猴猴想去的蘋果的位置。猴猴開始在編號為K的蘋果的位置,並且把這個蘋果吃了,之後每一天猴猴都要去吃一個蘋果,但是樹上那麼多蘋果吃哪個呢?猴猴想到自己去吃蘋果時一定會把路上遇到的蘋果都吃掉,於是猴猴決定去吃能讓自己這天吃的蘋果數量最多的那個蘋果,如果有多個蘋果滿足條件,猴猴就會去吃這些中編號最小的蘋果,那麼猴猴會按照什麼順序吃蘋果呢?

題目解析

先預處理,建立一個以K為根節點的樹,找出所有的葉子節點,排序

然後每當輸出最大值葉子節點,將那一條鏈上所有點的vis置為true,隨後未輸出過的葉子節點依次更新,每往上跳一步答案增加1,遇到根節點或者vis=true就停止

T2猴猴吃香蕉

題目描述

猴猴最愛吃香蕉了。每天猴猴出門都會摘很多很多的香蕉,每個香蕉都有一個甜度,猴猴不一定要把所有的香蕉都吃掉,猴猴每天都有一個心情值K,猴猴希望當天吃的香蕉滿足這麼一個條件,這些香蕉的甜度乘積恰好等於K,但是猴猴並不知道有多少種方法,於是猴猴把這個問題交給你。

輸入

第一行一個數D,表示有D天。 接下來2*D行,每天的資料有兩行
每天的第一行兩個數n和K,表示當天摘的香蕉數和心情值
每天的第二行有n個用空格隔開的整數表示香蕉的甜度
(n<=1000,K<=100000000,D<=20)

輸出

D行,每行一個數表示方案數,輸出對1000000007取模的結果。

題目解析

DP!(dp陣列可以用map存,因為K很大……)

將K因數分解

for(int i=1;i<=n;i++){//b[]為k經過因數分解的數 a[]為banana 
    if(a[i]==0) continue;
    for(int j=tot;j>=1;j--){
        if(b[j]%a[i]==0) dp[b[j]]=(dp[b[j]]+dp[b[j]/a[i]])%MOD;
        if(b[j]==a[i]) dp[b[j]]=(dp[b[j]]+1)%MOD;//如果是他自己   
   }
}

T3猴猴的比賽

題目描述

猴猴今天要和小夥伴猩猩比賽爬樹,為了公平不碰撞,猴猴和猩猩需要在不同的樹上攀爬。於是它們選了兩顆節點數同為n的樹,並將兩棵樹的節點分別以1~n標號(根節點標號為1),但兩棵樹的節點連線方式不盡相同。

現在它們決定選擇兩個標號的點進行比賽。為了方便統計,規定它們比賽中必須都向上爬。(即選定的賽段節點u→節點v都必須指向葉子方向)請你求出這兩棵樹上共有多少對節點滿足比賽的需求。

題目解析

暫無解析*>~<*

dfs序?