本次机考共33个监考群,参考人数近1K。
要求线上双机位全程自录制,考试时间2h,共5题。
共500分,最终折算为百分制,大于等于25分的同学进入线下复试。
整体难度:中等
推荐编程语言:C++
(各位预保研er在选择报名参营前可以先了解近3年TJU的夏令营推免以及最终录取人数情况。)
注:四非er最好慎重考虑,提前联系“靠谱”的老师了解当年情况,机试可参,复试......
目录
题目 A: 加密攻击
题目描述
小海棠截获了一串密码(一个正整数),这个密码不能直接使用。小海棠需要选择交换密码中任意两个数字,然后和原密码取最小公倍数作为转换密码,获得的最大转换密码即是所求密码。
输入
多组测试样例,第一行包含一个整数T,表示样例组数。
对于每组样例,包含一个整数表示小海棠截获的密码。
输出
对于每组样例,输出一个数字表示所求密码。
样例输入
3
1895
24
222
样例输出
11163445
168
222
提示
在样例中,1895通过交换变为5891,最小公倍数为11163445,取得了最大的最小公倍数。
T <= 1000
截获的密码范围[0, 10^9]。
所有数字不包含前导0,但是最终结果可以由包含前导0的数字产生。例如,如果截获了120,允许组成021,并尝试使用lcm(120, 21)作为合法候选答案。
题目 B: 长度最小
题目描述
小海棠得到了一个长度为n的只包含小写字母字符串。她希望截取一段,使得子串中包含'a'到'z'中所有字符至少一次,他想知道能找到的最短长度是多少。
输入
多组测试样例,第一行包含一个整数T表示样例数。
接下来T行,每行包含一串仅有小写字母的字符串,表示小海棠得到的字符串。
输出
对于每个测试样例,输出一个数字表示最短包含所有字符的字符串,如果没有一个子串包含'a'到'z',请输出-1。
样例输入
3
abcdefghijklmnopqrstuvwxyz
assssdfghjklqwertyuiopzxcvbnm
bca
样例输出
26
29
-1
提示
T <= 100
字符串长度不超过100000
题目 C: 海棠节填字游戏
题目描述
“海棠节”是天津大学最重要的节日之一,今年的海棠节推出了一项填字游戏,参加活动的同学可以到相应展台领取一张填字卡,填字卡的部分内容是已经给出的,需要在'?'处填写任意大写字母,如果最终卡片上包含"TJU",则可以领取一份礼品。
小海棠在本科学习的过程中养成了善于思考的好习惯,她想知道对于一张填字卡,她有多少种填法可以让她拿到奖品。
输入
多组样例,第一行输入一个整数T,表示需要处理的样例个数。
对于每组样例,包含一行字符串,字符串中仅包含大写字母和'?'。
输出
对于每组样例,输出一个整数表示有多少种填法可以拿到奖品,由于最终的结果很大,请将结果模1000000007输出。
样例输入
4
TJU?TJ
TJ?
TTTTJ
????
样例输出
26
1
0
52
提示
字符串长度不超过 10000。
T <= 100
题目 D: 覆盖
题目描述
小海棠得到了顶点个数为n的树,树的编号从1到n,每个节点都有一个命令编号(所有节点的命令编号初始为0)。小海棠指定1为树的根,她每次将向某个节点发送命令x,节点在接到命令后将本节点的命令编号更新为x,并向自己所有子节点传播命令x。小海棠想直到在她执行完所有命令后每个节点的命令编号是多少。
输入
多组样例,第一行包含一个整数T表示样例组数。
每组样例第一行包含两个整数n,k 分别表示节点个数和指令的条数。
第二行包含n-1个整数,第i个整数表示节点(i + 1)的父亲节点为。
接下来k行每行包含两个整数x, y,表示对x节点执行指令y。
输出
每组样例输出一行用空格分离的n个整数,表示所有命令执行完成后的命令编号。
样例输入
2
3 2
1 2
1 1895
2 129
4 1
1 1 1
3 1
样例输出
1895 129 129
0 0 1 0
提示
T <= 20
n,k <= 100000
发送的命令编号x范围为[1,100000]
题目 E: 异或游戏
题目描述
小海棠有一个数组,她对每次会从中挑选出两个数字做异或和,她想知道对这个数组的所有数字进行完所有可能采样后的异或和的和是多少,即求得以下公式的值
y = sum(from i=1,j=i+1 to i=n, j=n;)(!(ai || aj)) // 异或
输入
多组测试样例,第一行包含一个整数T表示样例组。
每组样例中,第一行包含一个整数n表示数组长度,第二行包含n个用空格分离的数字。
输出
对于每个样例,输出一个数字表示异或和的和。
样例输入
2
2
1 2
3
1 2 3
样例输出
3
6
提示
异或操作,英文为exclusive OR,缩写成xor。在二进制表示中,如果两个数的对应位置两个值不相同,则异或结果为1。如果两个值相同,异或结果为0。例如6和2的二进制分别问110和010,则异或为100。
在python和C/C++中,如果有两个变量a, b,则它们的异或可以用a ^ b表示。
T <= 10
n <= 1000000
数组中的数字不超过10^9。