jd算法笔试

 先是30道选择题:涉及C++、python代码理解、SMO算法、信息增益率、python的object、朴素贝叶斯的高偏差低方差、还有roc曲线细节、c++中的0长度数组、特异性与敏感性、不同排序的最差时间复杂度(快排、堆排、希尔),计算机串的三种表示(定长顺序、堆分配存储、块链存储)、一个节点有多次机会成为活节点(回溯 rather than分支限界法)、deque线程安全、哪些容器可以用数组&链表表示、c++类内成员访问相关、判断满循环队列

最大中位数
时间限制: 3000MS
内存限制: 589824KB
题目描述:
小明有一个长度为 n 的序列,他想从中挑选出一个子序列,使得这个子序列的中位数最大。显然,小明只需要选择原序列中最大的那个数就行,因此他加大难度,给出了一个限制:

原序列中相邻的两个数至少有一个被选到子序列中。

小明想知道在这个限制条件下,子序列最大的中位数是多少?

这里定义中位数是第 n/2 小的数,如 [1, 2, 3, 4, 5] 的中位数是 3,[2, 3, 4, 5, 6, 7] 的中位数是 4。



输入描述
第一行一个正整数 T ,表示数据组数。

对于每一组数据,第一行输入一个正整数 n;第二行输入 n 个正整数 ai, 表示原序列。

2 ≤ n ≤ 3 · 104, 1 ≤ ai ≤ 105, 1 ≤ T ≤ 5。

输出描述
对于每一组数据,输出一行一个正整数,表示能够得到的最大的中位数。


样例输入
3
5
1 2 3 4 5
6	
1 2 3 4 5 6
2	
7 8
样例输出
4
4
8

提示
样例解释

选择的子序列用下划线表示。

第一组样例,[1, 2, 3, 4, 5];

第二组样例,[1, 2, 3, 4, 5, 6];

 第三组样例,[7, 8]。

规则
请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果
点击“调试”亦可保存代码
编程题可以使用本地编译器,此页面不记录跳出次数
Python 3     编译器版本    规则 编译器
编译器版本:python:3.9.9-bullseye
编译命令:bash -c python -c "import py_compile; py_compile.compile(r'Main.py')" && cp __pycache__/Main.cpython-39.pyc /acmcoder/bin/
运行命令:python Main.cpython-39.pyc
缩进不能tab和空格混用。
如果使用sys.stdin.readline, 因为默认会带换行符, 所以要strip(' ')进行截取。
输入建议使用input()。

编程题|20.0分1/2
小明的等差数
时间限制: 3000MS
内存限制: 589824KB
题目描述:
小明觉得“等差数”是一类非常美妙的数字。这类数字的定义如下:

是十进制下的数字。

设这个数字有 n 位,di 表示该数从低到高的第 i 位,则有 d2 − d1 = d3 − d2 =. . . = dn − dn−1。特别地,n = 1 也是“等差数”。

例如,10, 2345, 5432, 111, 9, 0, 86420, 94 是“等差数”,而 233, 114514, 2356, 1235, 124则不是“等差数”。

小明随手写下了一个数字 x,他想知道大于或等于 x 的最小的“等差数”是多少。



输入描述
第一行一个正整数 T ,表示有 T 组数据。对于每一组数据,输入一行一个非负整数 x。

0 ≤ x ≤ 1017, 1 ≤ T ≤ 100。

输出描述
对于每一组数据,输出一行一个十进制下的整数,表示答案。


样例输入
5
100
0
152
233
212
样例输出
111
0
159
234
222

规则
请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果
点击“调试”亦可保存代码
编程题可以使用本地编译器,此页面不记录跳出次数
Python 3     编译器版本    规则 编译器
编译器版本:python:3.9.9-bullseye
编译命令:bash -c python -c "import py_compile; py_compile.compile(r'Main.py')" && cp __pycache__/Main.cpython-39.pyc /acmcoder/bin/
运行命令:python Main.cpython-39.pyc
缩进不能tab和空格混用。
如果使用sys.stdin.readline, 因为默认会带换行符, 所以要strip(' ')进行截取。
输入建议使用input()。


ac代码:
t = int(input())
d={3: {258, 642, 135, 777, 654, 147, 531, 789, 666, 159, 543, 420, 678, 555, 432, 567, 951, 444, 321, 579, 963, 840, 456, 333, 975, 210, 468, 852, 345, 987, 222, 864, 357, 741, 999, 234, 876, 111, 369, 753, 246, 630, 888, 123, 765}, 4: {3456, 6789, 3333, 6666, 3210, 9999, 6543, 9876, 6420, 9753, 9630, 2468, 2345, 5678, 2222, 5555, 8888, 5432, 8765, 8642, 1357, 1234, 4567, 1111, 4444, 7777, 4321, 7654, 7531, 3579}, 5: {55555, 34567, 13579, 86420, 65432, 44444, 99999, 23456, 54321, 33333, 88888, 12345, 43210, 98765, 22222, 77777, 56789, 87654, 11111, 66666, 45678, 97531, 76543}, 6: {123456, 555555, 987654, 234567, 765432, 111111, 666666, 543210, 345678, 222222, 777777, 654321, 456789, 333333, 888888, 876543, 444444, 999999}, 7: {5555555, 1234567, 8765432, 1111111, 6666666, 6543210, 2345678, 9999999, 2222222, 7777777, 7654321, 3456789, 3333333, 8888888, 4444444, 9876543}, 8: {55555555, 11111111, 88888888, 76543210, 66666666, 12345678, 22222222, 87654321, 77777777, 23456789, 33333333, 98765432, 44444444, 99999999}, 9: {555555555, 111111111, 876543210, 666666666, 222222222, 987654321, 777777777, 123456789, 333333333, 888888888, 444444444, 999999999}, 10: {5555555555, 1111111111, 9876543210, 6666666666, 2222222222, 7777777777, 3333333333, 8888888888, 4444444444, 9999999999}, 11: {55555555555, 11111111111, 66666666666, 22222222222, 77777777777, 33333333333, 88888888888, 44444444444, 99999999999}, 12: {555555555555, 111111111111, 666666666666, 222222222222, 777777777777, 333333333333, 888888888888, 444444444444, 999999999999}, 13: {5555555555555, 1111111111111, 6666666666666, 2222222222222, 7777777777777, 3333333333333, 8888888888888, 4444444444444, 9999999999999}, 14: {55555555555555, 11111111111111, 66666666666666, 22222222222222, 77777777777777, 33333333333333, 88888888888888, 44444444444444, 99999999999999}, 15: {555555555555555, 111111111111111, 666666666666666, 222222222222222, 777777777777777, 333333333333333, 888888888888888, 444444444444444, 999999999999999}, 16: {5555555555555555, 1111111111111111, 6666666666666666, 2222222222222222, 7777777777777777, 3333333333333333, 8888888888888888, 4444444444444444, 9999999999999999}, 17: {55555555555555555, 11111111111111111, 66666666666666666, 22222222222222222, 77777777777777777, 33333333333333333, 88888888888888888, 44444444444444444, 99999999999999999}, 18: {555555555555555555, 111111111111111111, 666666666666666666, 222222222222222222, 777777777777777777, 333333333333333333, 888888888888888888, 444444444444444444, 999999999999999999}}
d = {}
for i in range(3,18+1):#
    d[i] = set()
    for j in [9,8,7,6,5,4,3,2,1]:#开始数,
        for delta in [0,-1,-2,-3,-4,-5,-6,-7,-8,-9]:#公差[0,4]
            ok = 1
            x = ''
            for k in range(i):
                if j+k*delta > 9 or j+k*delta<0: ok=0; break
                x += str(j+k*delta)
            if not ok: break
            else:
                if str(int(x[::-1])) == x[::-1]:
                    d[i].add(int(x[::-1]))
                d[i].add(int(x))

while t:
    n = int(input())
    if n < 100:
        print(n)
    else:
        L = len(str(n))
        n = int(n)
        v, cnt = -1, 1e20
        for x in d[L]:
            if 0<= x-n < cnt:
                cnt = x-n
                v = x
        for x in d[L+1]:
            if 0<= x-n < cnt:
                cnt = x-n
                v = x
        print(v)
    t -= 1

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值