科大讯飞 0830笔试 研发第五批
笔试内容为:通用卷(12选择题+3编程)+选考(C++/JAVA/前端/Go/Python,8选择题+数据库 3选择题+linux 3选择题)
编程题如下,仅供参考,祝大家顺利!
1.可访问的资源数
已知牛牛有n份资源,编号为1,2,...,n,初始均处于未上锁状态。
m次操作,每一次操作给出一个编号p,如果p所对应的资源未上锁,则为其上锁;否则,解除锁,使其回到未上锁状态。每一次操作后,牛牛都希望分别统计闭区间[1, x], [y, n]中可访问的资源数量。
这里规定,一个资源可访问,当且仅当其处于未上锁状态。
输入描述:
第一行输入T (1<=T<=1000),代表测试数据的组数。对于每组测试数据,第一行输入四个正整数n, m, x, y (1<=n<=2*10^5; 1<=m<=4*10^5; 1<=x, y<=n),依次代表资源数量,操作次数,以及两个闭区间范围的边界。
接下去m行,每行输入一个正整数p (1<=p<=n),代表对编号为p的资源进行操作。
题目保证,所有测试数据的n之和不会操作2*10^5,m之和不会超过4*10^5。
输出描述:
对于每个操作,一行输出两个整数,分别代表区间[1, x]和[y, n]中可访问资源数。
示例输入:
2
4 3 2 3
2
3
3
6 6 4 2
1
3
6
4
4
2
示例输出:
1 2
1 1
1 2
3 5
2 4
2 3
1 2
2 3
1 2
2.数字的出现次数
一个长度为n的数组A1, A2, ..., An,其中Ai = i。q次操作,每次选择区间[l, r]将下标从l~r的数全部取出,按原顺序放置到数列末尾,数组变成A1, A2, ..., A{l-1}, A{r+1}, A{r+2}, ..., An, A{l}, A{l+1}, ..., A{r}。例如,[1,2,3,4,5,6],第1次选择操作[2,4],变化后数列变为[1,5,6,2,3,4],第2 次选择操作[3,5],数列变为[1,5,4,6,2,3]。请输出q次操作过程中,数字之出现过的下标位置的个数。
输入描述:
第一行包含两个整数n, q (1≤n,q≤3*10^3),表示数列的长度和操作次数。接下来q行,每行包含两个整数l, r (1 ≤l≤r≤n),表示 次操作。
输出描述:
输出一行包含n个整数,第i个数表示数字i出现过的下标位置的个数。
示例输入:
6 2
1 3
2 4
示例输出:
3 2 2 2 3 3
说明:
[1,2,3,4,5,6],第1次选择操作[1,3],变化后数列变为[4,5,6,1,2,3],第 2次选择操作[2,4],数列变为[4,2,3,5,6,1]。
数字1操作过程中出现的下标分别为[1,4,6],共3个。
数字2操作过程中出现的下标分别为[2,5,2],共2个。
数字3操作过程中出现的下标分别为[3,6,3],共2个。
数字4操作过程中出现的下标分别为[4,1,1],共2个。
数字5操作过程中出现的下标分别为[5,2,4],共3个。
数字6操作过程中出现的下标分别为[6,3,5],共3个。
示例输入:
20 6
1 5
8 12
6 18
3 9
5 5
13 20
示例输出:
6 6 6 6 6 2 2 4 4 4 5 5 6 6 6 5 5 5 5 5
3.数字串的最大得分
对于某个由0和1组成的串,他的得分是每段连续的1的长度的平方的总和。给定一个01串,你可以进行最多k次操作,每次操作可以选择一个0将其变成1。请问操作过后,该串的最大得分是多少。
输入描述:
第一行两个数字n, k (1≤n≤500, 0≤k<500)分别代表字符串的长度、可以操作的次数。
第二行为仅由 0,1 组成的长度为n 的字符串s
输出描述:
一个数字,代表最大得分
#科大讯飞求职进展汇总##秋招##笔试#示例输入:
6 1
100101
示例输出:
10
说明:
最优的方案是将第5位的0改为1,变为100111。此时一共有两段连续的1,分别为"1"和"111",得分分别为1和 9,总和为10。