【东华】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序?

posted @ 2020-10-23 21:27  latent_Lin  阅读(133)  评论(0)    收藏  举报