今天帮别人做笔试被虐了,凭记忆写出来希望有大牛给出解法。

2019-08-09 21:29:07 +08:00
 codechaser

输入数据: 第一行是 n 和 m 以空格隔开。n 指记录数,m 指查询次数。 下面 n 行: 给出 n 行数据库里面的记录,每行为一条记录,空格隔开,分别是 a(int),b(str),c(int),d(bool)。 在下面 m 行: 每行给出a_deltac_x。一共 m 行,表示每条查询操作。 要求针对每条查询操作,输出满足一下条件c_y的个数...打字实在太麻烦了,我直接上图吧:

台风天想我在家里思考的老哥来做做。

2827 次点击
所在节点    程序员
10 条回复
Rorshach
2019-08-09 21:52:36 +08:00
台风天?
lz 是在浙江么
Hstar
2019-08-09 22:02:02 +08:00
这题考察什么?阅读理解能力吗
nolan1864
2019-08-09 22:17:20 +08:00
1. 数据存两遍 vec1,vec2 ; vec1 按 c 排序,vec2 按 b 排序
2. 对于每次查询,二分 vec1 找第一个 c,然后向后遍历 vec1 中 c 为 cx 的
3. 遍历过程中对于每一个新出现的 b,在 vec2 中二分找第一次出现的 b,向后遍历 vec2,构造 vec3
4. 对于 vec3 中的元素对,判断是否满足条件,将满足条件的 cy 加到容器比如 set 中
5. 经过 2,3,4 后,统计 set 的大小

总之就是模拟
复杂度大概是 m * logn * 30 * (logn + 300 + 300 * 300),没算那些判断第一次 b 出现或者最后的容器 set 的复杂度

感觉复杂度差不多,欢迎讨论
1070794219
2019-08-09 22:19:12 +08:00
不知道您毫不谦虚的说"帮别人做笔试"的目的是什么,我总觉得还是低调点,你这本来就算不公平了,牛客拉黑会进企业黑名单的
brainfxxk
2019-08-09 22:20:39 +08:00
没读懂这题 甚至看不懂样例
brainfxxk
2019-08-09 22:24:09 +08:00
原来是没刷出第一张图
b 相同的记录数不超过 300 按 b hash 之后随便做吧...
whileFalse
2019-08-09 23:26:00 +08:00
标题不是说凭记忆写出来的吗?
感情 lz 的记忆还是 jpg 格式的。
zjsxwc
2019-08-09 23:39:40 +08:00
阅读理解题, 这题就是模拟而已
aijam
2019-08-10 07:36:24 +08:00
我觉得出题的人,要不语文有问题,要不逻辑有问题。a_delta, c_x, c_y 都不带定义的,全靠审题的人通过零星的描述和例子意会。工作生活中挺讨厌这种人,思路和语言组织都是乱的。
codechaser
2019-08-10 10:22:52 +08:00
@Hstar 这题我读就花了 15 分钟。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/590584

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX