淘天Java研发实习 - 笔试

2025年4月8号 19:00 - 20:40

题型:

基础 - 单选 7题 21分

基础 - 多选 5题 15分

Java基础 - 单选 2题 6分

Java基础 - 多选 1题 3分

编程题(工程) 1题 20分

编程题(共用) 2题 35分

编程题(工程):

整体判断:

题目描述:

对于给定的k个数组,第i个数组由ni个整数组成。现在想知道,是否存在这样两个不同的数组,使得这两个数组各自删除一个整数后,这两个数组剩下的元素和相等。

输入:

第一行输入一个整数,代表数据组数。

每组测试数据:第一行输入一个整数k,代表有k个数组。

第i个数组:第一行输入一个整数n,代表i数组的元素个数。

第二行输入n个整数,即i数组。

输出:

存在两个数组使得两个数组各删除一个整数后,这两个数组剩下的元素和相等,则输出YES,反之输出NO。

例如:
输入:
2
2
5
2 3 1 3 2
6
1 1 2 2 2 1
2
2
8 9
9
2 10 20 6 18 6 2 1 8 7
输出:
YES
NO

编程题(共用):

1.小苯的字符串构造

题目描述:

小苯给了你一个正整数n,他希望你构造一个仅包含小写英文字母'a'到'z'长度为n的字符串s,满足s的所有本质不同连续子串中,长度为奇数的字串恰好出现了奇数次。

本质不同连续子串:指的是从一个字符串中提取的所有连续子串中,按内容相同性去重后得到的集合。在这个集合中,如果有两个子串在字符序列上完全相同,那么他们被视为“本质相同”,只记作一个。

例如,对字符串“aa”。所有可能的连续子串为:从位置1:“a”,“aa”;从位置2:“a”,其中“a”出现两个,但本质不同连续子串只记作“a”,“aa”两个。

输入:

第一行包含一个正整数T(1≤T≤100),代表T组数据

接下来T组数据在单独一行输入一个正整数n(1≤n≤2000)

例如:
输入:
1
4
输出:
live

2.小红的子树操作

题目描述:

在神秘莫测的比特王国中,流传着这样一个传说——在王国深处生长着一棵蕴含天机的神奇大树。这棵树由n个节点构成,1号点是根节点,每个节点都记录着一段古老的符文,初始每个节点的符文为ai。传说只有将树上所有节点的符文调和为零,才能开启通往失落宝藏的大门。聪明勇敢的小红接受了挑战,她掌握了一套奇特的操作法则,能够对树中部分节点施法改变其符文,但每次施法都需要付出一定代价。

具体来说,小红可以进行如下操作:

  • 选择树中的任一节点 v 及一个非负整数 x 。
  • 将 v 以及 v 的子树中所有与 v 距离为偶数的节点的权值进行异或操作,即更新为:a[u] = a[u] ^ x 。
  • 每进行一次此操作就产生 x 的代价。

请问小红至少需要花费多少总代价,才能使得所有节点的符文权值均变为0?

名词解释:在一棵树中,对于任一节点 v ,以 v 为根节点并包含所有从 v 出发可以达到的后代节点(包括 v 自身)的集合构成了 v 的子树。在树中,任意两个节点之间仅存在一条简单路径,该路径上所经过的边的数目定义为这两个节点之间的距离。

输入:

第一行包含一个整数 n ,表示节点的数量。

第二行输入 n 个整数 a1,a2,……,an ,表示各个节点初始权值。

接下来第 n-1 行输入两个整数 u,v ,表示树中的一条边,所给边构成一棵以1为根的树。

1≤ n ≤2×10^5

0≤ ai ≤10^9

输出:

输出一个整数,表示将所有节点权值变为0的最小总代价。

例如:
输入:
5
1 4 3 5 5
1 2
2 3
3 4
3 5
输出:
9
解析:
先选节点1,花费1代价,使得节点变为[0,4,2,5,5];
再选节点2,花费4代价,使得节点变为[0,0,2,1,1];
再选节点3,花费2代价,使得节点变为[0,0,0,1,1];
再选节点4,花费1代价,使得节点变为[0,0,0,0,1];
再选节点5,花费1代价,使得节点变为[0,0,0,0,0];
因此输出为 1 + 4 + 2 + 1 + 1 = 9

全部评论

相关推荐

03-15 20:26
已编辑
电子科技大学 Java
T3题面:给一个3e5数组,每次询问长度为len的子数组乘积的和,如果子数组乘积>1e9,则视为0.赛后一分钟想出来了,比赛时打了个暴力+线段树注意到1e9大约是2^30, 因此len长度如果>30就直接输出0,30以内做一个记忆化就行,复杂度O(30*n)感觉是以前比赛做过的题,忘了怎么做了。。。---upd: 忘了数据范围了,如果有0,1的话那这样也不行
blueswiller:给出一个做法,刚刚才想到,应该没问题,时间复杂度为 O(max(30n, nlogn)): 1. 根据 0 切分数组。2. 现在问题转化为>=1 的情况,我们首先维护每一个数前一个 > 1 的数的位置,同时维护一个长度的差分数组,初始值全为 0。3. 我们从每一个数 i 开始向前跳,至多跳 30 次,维护这个过程中的乘积,于是得到 30 个区间加和。举例:假设从 j1 跳到 j2 ,相当于对查询长度 (i- j1 + 1) 至 (i - j2) 贡献 a_i * ... * a_j1。4. 对于所有区间加和,我们采用差分数组结合树状数组对其进行维护,由于长度至多为 n ,树状数组构建的复杂度为 O(nlogn),于是,构建阶段的复杂度为 O(max(30n, nlogn))。在线单次查询的复杂度为树状数组查询的复杂度 O(logn)。
投递淘天集团等公司10个岗位 > 笔试
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客企业服务