腾讯秋招笔试 – 20221016

1. 链表异或

题目描述:
小Q有两个整数a和b,这两个整数的二进制存储到了两个链表中。
整数a的二进制最高位存储在链表的头节点中,剩下的二进制位按顺序存储。
而整数b的二进制最高位储存在链表尾中,剩下的二进制位向链表头方向按顺序存储。
小Q想对这两个数做按位异或的操作得到整数c,希望能够将c的二进制表示同样存储在链表中输出(最高位存储在头节点中且无前导零)。
数据范围:给定表示两个数的二进制链表,节点个数是正整数且都不超过100000。

示例1:
输入:
{1,0,1,1},{0,1}
输出:
{1,0,0,1}
说明:
两个数在十进制中是11和2,异或结果为9。

示例2:
输入:
{1,1,1},{1,0,1}
输出:
{1,0}
说明:
两个数在十进制中是7和5,异或结果为2。

2. 小Q的奇怪操作

题目描述:
小Q有一个序列a1,a2,…,an,小Q可以执行k次操作,每次操作可将ai变为其二进制1的个数,具体每次操作步骤如下:
1.小Q选择一个p(1<=p<=n)
2.将ap写成二进制形式,并且数出’1’的个数为cnt
3.将ap变成cnt
小Q想知道k次操作后序列之和的最小值为多少?
(注:你可以对某个p(1<=p<=n)进行多次操作)

输入描述:
第一行输入两个整数n,k。
接下来输入n个正整数,表示小Q的序列。
1<=n<=10^5
1<=k<=100
1<=ai<=10^9
输出描述:
输出一个数,代表答案。

示例1:
输入:
2 1
8 7
输出:
8
说明:
8的二进制为1000
7的二进制为111
小Q若对8执行操作,则序列变成[1,7],和为8
小Q若对7执行操作,则序列变成[8,3],和为11
所以最小值为8

示例2:
输入:
3 2
8 7 1024
输出:
9
说明:
8的二进制为1000
7的二进制为111
1024的二进制为10000000000
小Q若对8,7执行操作,则序列变成[1,3,1024],和为1028
小Q若对8,1024执行操作,则序列变成[1,7,1],和为9
小Q若对7,1024执行操作,则序列变成[8,3,1],和为12
小Q若对7执行2次操作,则序列变成[8,2,1024],和为1034
所以最小值为9

示例3:
输入:
2 2
2 15
输出:
3
说明:
对15操作2次,序列变成[2,1],和为3

3. 双向队列游戏

题目描述:
大Q有一个双向队列,队首元素到队尾元素依次是q1,q2,…,qn。
大Q和小Q玩游戏,游戏一共进行n轮,对于第i轮操作:
1. 如果i是奇数,则大Q选择弹出队首元素或队尾元素。
2. 如果i是偶数,则小Q选择弹出队首元素或队尾元素。
第i轮弹出的元素为xi。
考虑X = x1 * 10 ^ (10^(n-1)) + x2 * 10 ^ (10^(n-2)) + … + xn * 10 ^ (10^0)
大Q想让x尽可能的大,小Q想让x尽可能的小。
在两个人都采取最优策略的情况下,X是多少?
由于X太大了,你只需要输出x1,x2,…,Xn。

输入描述:
第一行一个整数n(1<=n<=100000)。
第二行n个整数q1,q2,…,qn(1<=qi<=n),对于任意i != j,满足qi != qj。
输出描述:
输出一行n个整数x1,x2,…,xn表示答案。

示例1:
输入:
3
1 2 3
输出:
3 1 2
说明:
第一轮,大Q弹出3。
第二轮,小Q弹出1。
第三轮,大Q弹出2。
X = 3 * 10 ^ (10^2) + 1 * 10 ^ (10^1) + 2 * 10 ^ (10^0)。

示例2:
输入:
21
21 3 4 16 1 17 2 20 18 15 19 14 13 12 11 10 9 7 8 5 6
输出:
21 3 6 4 16 1 17 2 20 5 18 8 15 7 19 9 14 10 13 11 12

4. 小Q的零一区间

题目描述:
小Q按如下方式构造一个01串:
第一个字符是1
第二个字符是0,此时字符串为”10″
第3~4个字符,为前两个字符的零一翻转(1变0,0变1),此时字符串为”1001″
第5~8个字符,为第1~4个字符的零一翻转,此时字符串为”10010110″
第9~16个字符,为第1~8个字符的零一翻转,此时字符串为”1001011001101001″
后面的操作同理。
小Q按这个方法构造了一个无限长的串。她想知道,第L个字符到第R个字符形成的子串中,一共有多少个’1’?

输入描述:
两个正整数L和R,用空格隔开。
1<=L<=R<=10^14
输出描述:
第L个字符到第R个字符形成的子串包含的’1’的数量。

示例1:
输入:
4 7
输出:
3
说明:
第四个字符到第七个字符组成的子串是”1011″,共有3个’1′

5. 抵消的数

题目描述:
有一个长度为n的数组a1,a2,…,an,数组所有元素之和为sum,小Q需要装饰一下这n个数,所以他准备选择两个整数x和y来装饰,x和y要满足以下条件:
1.这2个数的绝对值之和等于数组a元素之和(即|x|+|y|=sum)
2.并且能构建一个新数组b,其中bi=ai * x或者bi=ai * y,使得数组b所有元素之和为0。
3.与此同时,小Q希望这2个数的绝对值之差的绝对值最小,即||x|-|y||最小。
如果存在多个答案,任意输出一种即可,如果不存在对应的x和y,输出-1即可。

输入描述:
第一行输入一个正整数n。
第二行输入n个数a1,a2,…,an。
1<=n<=100
1<=ai<=1000
输出描述:
第一行输出两个整数×和y。
第二行输出一个长度为n且仅包含’X’和’Y’的字符串。
如果第i个字符为’X’代表ai乘上的是x,如果第i个字符为’Y’代表ai乘上的是y。

示例1:
输入:
2
1 1
输出:
1 -1
XY
说明:
x=1,y=-1,满足3个条件。
条件1:|x|+|y|=|1|+|-1|=2=1+1。
条件2:a1*x,a2*y,所以,b数组为[1,-1],1+(-1)=0。
条件3:||1|-|1||=0,显然最小。

示例2:
输入:
5
248 537 207 611 771
输出:
1148 -1226
XYXYX

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注