秋招日寄|拼多多笔试20240825编程题记录

第一题:题目内容

多多有一题n个节点的树,树中每一条边都有一个权值,多多还有一个长度为n的正整数序列:v_1,v_2,...,v_n

删除树中若干条边之后(或者不删),就会变成一个有x个连通块的图,此时的得分为:剩余边权和+v_i(两个可以互相到达的节点属于同一个连通块,注意一个孤点也是一个连通块)

多多可以删除图中若干条边(可以不删)。现在多多想知道,最多能够得到多少分。现在请你告诉多多答案。

输入描述

第一行一个整数T,接下来有T组数据

每组数据第一行一个整数n(2≤n≤10^5)

第二行n个整数v_1,...v_n(1≤v_i≤10^9)

接下来n-1行,每行3个数,a,b,w(1≤a,b≤n,1≤w≤10^4)

表示节点a与节点b之间有一条权值为w的边

保证\sum \limits n 不超过10^5

保证每组数据给定的都是一棵树

输出描述

对于每组数据输出一行一个整数,表示最多能够得到多少分

示例1

输入

1
3
1 3 4
1 2 1
2 3 2

输出

5

说明

删除1与2之间的边,此时剩余边权和=2,连通块数量=2,得分=2+v[2]=2+3=5

示例2

输入

2
3
3 3 4
1 2 1
2 3 2
3
1 2 5
1 2 1
2 3 2

输出

6
5

说明

第一组数据:不删除任何边

第二组数据:删除所有边

示例3

输入

1
5
2 5 2 1 4
2 1 1
2 4 4
4 3 3
1 5 4

输出

16

说明

删除2到1之间的边,形成2个连通块,此时得分为16

----------

第二题:题目内容

多多有一列正整数组成的数列,支持两种操作:

选取一个偶数,使其值减半

选取两个数字,移除并替换为两个数字的和

多多最终希望能够得到一个全为奇数的数列,请计算最少需要操作几次

输入描述

第一行一个数字T,代表测试用例组数(0<T≤10)

对于每个测试用例:

第一行为n,代表数组长度,(0<n≤10^5)

第二行n个正整数,a_i,(0<a_i<10^{14})

输出描述

对于每个测试用例,输出一个数字,代表最少需要操作次数

示例1

输入

3
3
2 4 4
2
1 9
5
1 2 3 4 5

输出

3
0
2

----------

第三题:题目内容

多多携带一件价值为x的礼物参加了一个节日派对。除多多外在场的有n个人,第i个人的当前持有的礼物价值为a_i

多多可以和任意当前持有礼物价值比多多低的人交换礼物。

请问最少经过多少次交换,可以使得n个人持有的礼物价值形成单调不减的数列。

a_1≤a_2≤...≤a_n

输入描述

第一行输入两个数字nxx代表人数、和多多最多持有的礼物价值。

第二行n个数字a_1,a_2,...a_n,代表其他所有人最初持有的礼物价值

对于60%的数据,1≤n≤10^3

对于100%的数据,1≤n≤2*10^61≤x,a_i≤10^9

输出描述

输出一个数字,代表为了达成目标最少进行的交换次数。

如果无法达成目标则输出-1

样例1

输入

5 5
2 1 3 2 4

输出

3

说明

最初多多的礼物价值为5

1次选择和第5个人交换。交换后多多的礼物价值为4,其他人为{2,1,3,2,5}

2次选择和第4个人交换。交换后多多的礼物价值为2,其他人为{2,1,3,4,5}

3次选择和第2个人交换。交换后多多的礼物价值为1,其他人为{2,2,3,4,5}

----------

第四题:题目内容

给定长度为n01串,定义一次操作为,将整个字符串按顺序分为两部分,将两部分各自翻转后再按原顺序拼接。

提问,进行任意次的操作后,可以得到的最长的连续的01交替的子串有多长。

例:原01串为01001,可以先将原串分为01001两部分,分别翻转得到01010,按原顺序拼接后得到01010,此时最长的连续交替子串为01010,长度为5

输入描述

第一行输入n表示输入的01串的长度。(1≤n≤2*10^6

第二行输入长度为n01

输出描述

输出一个数字表示可能得到的最长的交替01子串的长度。

样例1

输入

5
10010

输出

5

说明

原字符串分为10010,分别翻转得到01010,拼接后为01010

#牛客创作赏金赛#
SAGIMA笔面经整理 文章被收录于专栏

本人在秋招过程中的一些笔试和面经,尽可能的结构化、系统化的整理了,有些细节可能记不太清,大家可以随便提问,肯定知无不言言无不尽!

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务