【20220903-美团笔试】

参考:20220903美团笔试题解_笔经面经_牛客网

前两个签到题就不整理了

第三题:

给定一棵有n个节点的树,节点用1,2,…n编号。1号节点为树的根节点,每个节点上有一个用大写字母表示的标记。求每个
节点的子树中出现的字母标记种类数。
注:子树的定义:设T是有根树,a是T中的一个顶点,由a以及a的所有后裔(后代)导出的子图称为有根树T的子树。
输入描述
第一行输入一个正整数n,表示树的节点数量。
第二行输入n-1个正整数,第i个整数表示第i+1号节点的父亲节点。
第三行输入长度为n的由大写字母组成的字符串s1s2s3...sn,第i个字符si表示第i号节点的标记。
3≤n≤50000.
数据保证形成一棵合法的树,字符串由大写字母组成。
输出描述
输出n个整数,相邻两个数之间用空格隔开,第i个整数表示第i号节点的子树中出现不同的字母种类数。input:
6 
1 2 2 1 4
ABCCADoutput:
4 3 1 2 1 1

解题报告:

解法多样,主要就是每个节点都记录一下子树出现过的字符。可以用string,可以用二进制,可以用set,反正一共就26个字母

参考代码:

n = int(input())
fa = list(map(int, input().split()))
s = input()
ans = [0] * n
g = [[] for _ in range(n)]
for i, c in enumerate(fa, start=1):g[c - 1].append(i)def solve(cnt):v = (1 << (ord(s[cnt]) - ord('A')))for nxt in g[cnt]: v |= solve(nxt)ans[cnt] = bin(v)[2:].count('1')return vsolve(0)
print(*ans)

第四题:

有n个城市,城市从1到n进行编号。小美最初住在k号城市中。
在接下来的m天里,小美每天会收到一个任务,她可以选择完成当天的任务或者放弃该任务。
第i天的任务需要在ci号城市完成,如果她选择完成这个任务,
若任务开始前她恰好在ci号城市,则会获得ai的收益;
若她不在c号城市,她会前往c号城市,获得bi的收益。
当天的任务她都会当天完成,任务完成后,她会留在该任务所在的ci号城市直到接受下一个任务。
如果她选择放弃任务,她会停留原地,且不会获得收益。
小美想知道,如果她合理地完成任务,最大能获得多少收益?输入描述
第一行三个正整数n,m和k,表示城市数量,总天数,初始所在城市。
第二行为m个整数c1, c2...cm,其中ci表示第i天的任务所在地点为ci
第三行为m个整数a1, a2...am,其中ai表示完成第i天任务且地点不变的收益。
第四行为m个整数b1, b2...bm,其中bi表示完成第i天的任务且地点改变的收益。
1<=k,ci<=n<=3e4
1<=m<=3e4
0<=ai,bi<=1e9输出描述
输出一个整数,表示小美合理完成任务能得到的最大收益。input:
3 5 1
2 1 2 3 2
9 6 2 1 7
1 3 0 5 2output:
13

解题报告:

dp[i][j]代表第i天结束时小美在j号城市的最大收益。

其实可以有两种定义的方法;第i天结束时在j号城市,或者第i天开始时在j号城市(也就是第i-1天结束时在j号城市)。这两种方法各有好处,第一种的好处在于,可以直接if(c[i]==j),然后dp[i][]用dp[i-1][]转移过来,好处二是,因为题目给的就是初始所在城市,也就是dp[0][]当做初始化。如果用第二种方法,那最好是用dp[i]更新dp[i+1]的方式。但是这种方式由于赋值号左边是不确定的,因此较难优化,因此我们用第一种方法去定义。

状态转移也比较显然:

if c[i] == j:

        dp[i][j] = dp[i-1][j] + a[i] # 完成任务

else:

        t1 = dp[i-1][j] # 不完成任务

        t2= max(dp[i-1][1], dp[i-1][2], ...不包含dp[i-1][c[i]]..., dp[i-1][n]) + b[i] # 完成任务

        dp[i][j] = max(t1, t2)

不难发现,可以滚动数组优化一下,只用存下上一轮的最大值和次大值就可以了。(存两个值是为了保证有一个不是c[i]的)

时间复杂度O(n)。

参考代码:(他这个解法和上述题解略有不同,但是殊途同归)

n, m, k = list(map(int, input().split()))
c = list(map(int, input().split()))
a = list(map(int, input().split()))
b = list(map(int, input().split()))h = [(0, i) for i in range(1, n + 1)]
pre = [-1] * (n + 1)
pre[k] = 0
v1 = (0, k) # 最大
v2 = (0, 0) # 次大for i in range(m):v = 0# 直通if pre[c[i]] != -1:v = max(v, pre[c[i]] + a[i])if c[i] != v1[1]:v = max(v, v1[0] + b[i])elif c[i] != v2[1]:v = max(v, v2[0] + b[i])pre[c[i]] = max(pre[c[i]], v)if v > v1[0]:if c[i] == v1[1]:v1 = (v, c[i])else:v1, v2 = (v, c[i]), v1elif v > v2[0]:v2 = (v, c[i])print(max(pre))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算底层技术-虚拟网络设备(Bridge,VLAN)

openstack底层技术-各种虚拟网络设备一(Bridge,VLAN) openstack底层技术-各种虚拟网络设备二(tun/tap,veth) Linux BridgeBridge与netfilterVLAN VLAN设备原理及配置VLAN在openstack中的应用IBM网站上有一篇高质量文章Linux 上的基础网络设备详解。本文会参考文章部分内容&…

【Codeforce-911D】逆序对

题干&#xff1a; Problem - D - Codeforces 解题报告&#xff1a; 不难发现&#xff0c;假设n的倒序排列(n,n-1,...,3,2,1)的逆序对是x&#xff0c;则对n的任意一个逆序对数为y的排列做翻转&#xff0c;新生成的排列的逆序对数位x-y。 因此这题作为奇偶性&#xff0c;其实只…

【LeetCode-面试题 17.09 - medium】第 k 个数

力扣 解题报告&#xff1a; 法一&#xff1a;优先队列做bfs。 法二&#xff1a;看成三个有序链表&#xff0c;做三路归并即可。 注意这里归并&#xff0c;如果多个指针最小值&#xff0c;那么这些指针都需要

10分钟精通SharePoint-验证方式

简介 说到身份验证大家应该不陌生&#xff0c;访问任何平台或系统都需要身份验证&#xff0c;SharePoint也不例外&#xff0c;用户身份验证可根据身份验证提供程序验证用户的身份&#xff0c;身份验证提供程序包含用户平局切可以确认用户正确提交这些平均的目录或数据库。用于…

【18周-钻石】能量供应

思路&#xff1a; 总纲是贪心&#xff0c;按终点排序&#xff0c;然后优先往右边排能量塔。具体实现的时候需要单点更新&#xff0c;区间查询&#xff0c;所以用树状数组set维护一下&#xff0c;就OK了。 代码&#xff1a;&#xff08;不知道为啥有一个样例RE了&#xff09; …

【LeetCode-2421(hard)】好路径的数目

解题报告&#xff1a; 提供两种解法&#xff1a;1、并查集。2、启发式合并。3、树分治&#xff08;点分治&#xff0c;但是校招应该不会问到这个难度吧&#xff0c;&#xff0c;不复习了就&#xff09; 解题思路1&#xff1a; 两种思考方式可以想到这个解法。 1、【由特解到…

分布式事务解决方案框架(LCN)

事务概念 事务特性(ACID) 原子性&#xff08;A&#xff09; 所谓的原子性就是说&#xff0c;在整个事务中的所有操作&#xff0c;要么全部完成&#xff0c;要么全部不做&#xff0c;没有中间状态。对于事务在执行中发生错误&#xff0c;所有的操作都会被回滚&#xff0c;整个…

C#分布式事务解决方案-TransactionScope

引用一下别人的导读&#xff1a; 在实际开发工作中&#xff0c;执行一个事件&#xff0c;然后调用另一接口插入数据&#xff0c;如果处理逻辑出现异常&#xff0c;那么之前插入的数据将成为垃圾数据&#xff0c; 我们所希望的是能够在整个这个方法定义为一个事务&#xff0c;Tr…

【19周-星耀】FASTER!FASTER!FASTER!

题目&#xff1a; 解题报告&#xff1a; 看数据范围&#xff0c;应该是个n^3的dp。 但是刚开始觉得二维就可以写。 但是G了&#xff0c;因为无法根据定义的状态判断从[i]到[i1]的速度是多少。我这直接默认是d[i]了&#xff0c;但是显然不一定是。 然后感觉欸&#xff0c;我是…

[转载]使用消息队列实现分布式事务-公认较为理想的分布式事务解决方案

前阵子从支付宝转账1万块钱到余额宝&#xff0c;这是日常生活的一件普通小事&#xff0c;但作为互联网研发人员的职业病&#xff0c;我就思考支付宝扣除1万之后&#xff0c;如果系统挂掉怎么办&#xff0c;这时余额宝账户并没有增加1万&#xff0c;数据就会出现不一致状况了。 …

【LeetCode-6195. hard】对字母串可执行的最大删除数

题干:力扣 解题报告&#xff1a; 刚开始觉得直接贪心选有短则短&#xff0c;但是发现不行&#xff0c;不能贪心有短的可以操作的则选短的。 三个方式想到倒着递推。一是直接记住这个特例&#xff0c;正推还倒推不能互相转换的特例。 二是因为dp[i]代表前i个的最大次数&#x…

【洛谷 P2034】选择数字(单调队列优化dp)

题目链接&#xff1a;选择数字 - 洛谷 解题报告&#xff1a; 思路1&#xff1a; 参考代码&#xff1a; #include<cstdio> #include<iostream> #include<deque> using namespace std; const long long Maxn10000020,inf0x3f3f3f3f; long long a[Maxn],s[Max…

了解Entity Framework中事务处理

Entity Framework 6以前&#xff0c;框架本身并没有提供显式的事务处理方案&#xff0c;在EF6中提供了事务处理的API。 所有版本的EF&#xff0c;只要你调用SaveChanges方法进行插入、修改或删除&#xff0c;EF框架会自动将该操作进行事务包装。这种方法无法对事务进行显式的控…

【LeetCode-769. medium】最多能完成排序的块

力扣 解题报告&#xff1a; 注意这种【根据一个要求&#xff0c;将数组分成多个区间】类模型的问题&#xff08;比如汽车加油站、加法表达式求和&#xff09;&#xff0c;套路就这三步&#xff1a; 1、初始化 2、for循环或者while&#xff0c;里面三步 2.1 更新 2.2 如果符合…

System中不存在类型或命名空间名称Transactions

添加引用 System.Transactions.dll 在web.config的<assemblies>节点加 <add assembly"System.Transactions, Version2.0.0.0, Cultureneutral, PublicKeyTokenB77A5C561934E089"/>

SQL Server Profiler工具

一、SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程&#xff0c;其作用如下&#xff1a; 图形化监视SQL Server查询&#xff1b;在后台收集查询信息&#xff1b;分析性能&#xff1b;诊断像死锁之类的问题&#xff1b;调试T-SQL语句&#xff1b;模拟重放…

【LeetCode856. medium】括号的分数

856. 括号的分数 解题报告&#xff1a; 括号问题考虑栈。 本来是想用栈做&#xff0c;但是发现其实得分是相加还是乘2&#xff0c;和括号的层级有关系。 比如第三层的括号之间就是相加&#xff0c;第二层的括号就是把第三层的分数和乘2。记得算完第二层的分之后&#xff0c;…

SharePoint Permission中6个表的关联关系**

1、UserInfo&#xff1a;定义所有user&#xff0c;对应的类为SPUser&#xff0c;以site collection为单位&#xff0c;tp_ID字段标识user的id值。 2、Groups&#xff1a;定义所有组&#xff0c;对应的类为SPGroup&#xff0c;以site collection为单位&#xff0c;ID字段表示组…

【LeetCode2434. medium】使用机器人打印字典序最小的字符串

2434. 使用机器人打印字典序最小的字符串 解题报告&#xff1a; 首先进行题意转换&#xff0c;其实上述两种操作描述的就是一个栈。 为什么要进行题意转换呢&#xff1f;因为你看题目说有两种操作&#xff0c;但是却不问最少的操作数&#xff0c;说明说不定这两种操作可以合并…

天猫精灵方糖拆解报告和芯片详解

折腾&#xff1a; 【记录】天猫精灵方糖拆解过程 后&#xff0c;下面详细整理关于芯片的信息。 总体截图&#xff1a; 各个单元&#xff1a; MEDIATEK ARM MT8516AAAA 1812-BZASH BET02027 ACMQPQ8K 【整理】SoC CPU MEDIATEK MT8516详解 SAMSUNG 810 K9F1G08U0F SC…