天津大学2024-2025 预推免 机试题目(第二批)智算、新传

机试时间2024年9月18日,线上双机位

所有题目:内存限制:128MB  时间限制:1.000S

目录

题目 A: 消消乐

题目 B:月饼礼盒

题目 C:最多格子

题目 D:小天的密码本

题目 E:MST和MST

题目 A: 消消乐

题目描述
小天有一个字符串,他希望可以找出字符串中所有连续的(长度大于1的)'t',并将它们全部删除。
输入
多组输入,第一行包含一个整数T表示样本数。对于每个样例,输入一行仅包含小写字母的字符串。

输出
对于每个样例,输出一行表示处理之后的字符串。
样例输入

3
axxt
ttxxxxt
abcdefg

样例输出

axxt
xxxxt
abcdefg

提示
T≤100 字符串长度不超述10000,仅包含小写字母。样例保证输出结果不会为空。

 

题目 B:月饼礼盒

题目描述
十五的月亮十六圆,今天仍过中秋节。小天在组装月饼礼盒,月饼礼盒中包含大中小三种月饼,已知a个小月饼可以合成一个中月饼,b个中月饼可以合成一个大月饼。x个小月饼、y个中月饼、z个大月饼可以组成一个月饼礼盒。小明初始拥有i个小月饼、j个中月饼、k个大月饼,请问小天最多能组装多少个月饼礼盒。
输入
多组测试样例,第一行输入一个整数T表示样例个数。
对于每一个样例,输入八个数字i j k x y z a b,含义如题面所示。

输出
对于每个样例,输出一个整数表示最多可以组成月饼礼盒的套数。
样例输入

10 10 10 1 1 1 2 2
20 20 10 1 1 1 2 2

样例输出

10
16

题目 C:最多格子

题目描述
有一个由字母构成的 n x m 的矩阵。从左上角出发,走过的字母不能再走,问最多能经过几个格子(包括最开始在的格子,走到不能走为止,只能上下左右四个方向走)。
输入
第一行输入两个整数 n,m ,表示矩阵的行数和列数。之后n行每行输入 m个大写字母,表示整个矩阵,0<n,m<1000。

输出
输出一个数字,表示答案。
样例输入

3 6
HFDFFB
AJHGDH
DGAGEH

样例输出

6

题目 D:小天的密码本

题目描述
小天制作了一个密码本用于更安全地传输数据,密码本中包含n个整数,编号为a1...an。每次解密小天将取出[as,at]中的所有恰好包含x个质因子的数字,并将它们取异或和,得到解密结果。现给出密码本包含的数字,同时给出多个询问,请你帮助小天完成解密程序。
输入
第一行包含两个整数n,k表示密码本的长度,将要处理解密的数量。
第二行包含n个整数,表示密码本的内容。
接下来k行每行三个数,s t x,表示需要把[s,t]区间内的所有数字取出,并寻找恰好包含x个质因子的数字。

输出
对于每个询问,输出一个数字表示解密结果

样例输入

10 3
4 8 6 2 9 4 5 7 9 5
1 10 1
1 2 2
1 10 5 

样例输出

5
4
0

提示
对于第一组询问,其中[2,5,7,5]四个数字是符合要求的,这四个的异或和为5

对于第二组询问,4=2*2,包含2个质因子,4的异或为4.

题目 E:MST和MST

题目描述
小天在学习了最小生成树算法(MST)后,他开始思考最小生成树和最大生成树的区别。请你帮他完成一个程序,输出最小生成树与最大生成树之间的差。
输入
多组测试数据,第一行输入一个数字T表示测试数据组数,对于每组数据:第一行输入两个数字n m,表示图包含n个节点,编号从1到n。图中有m条边。
接下来m行每行包含三个数字s t w,表示从s到t包含一个长度为w的边。

输出

每组样例输出一个数字,表示最小生成树和最大生成树的差。

样例输入

2
3 2
1 2 3
2 3 5
2 2
1 2 2
1 2 5

样例输出

0
3

提示
n≤ 1e5,m < 1e6
w ≤ 1e6
对于C++用户,可以使用scanf加速输入,范例如下:心
int a;

long long b;scanf("%d", &a);

printf("%d\n", a);

scanf("%lld", &b);

printf("lld\n", b);

你也可以使用"std::ios::sync_with_stdio(false)"加速输入输出,样例如下
using std::cin;using std:.cout;using std:.endl;std::ios::sync with stdio(false);
int a;
cin >> a;
cout << a << endl;

我的题解:

题目A:

#include <iostream>
using namespace std;
int main(){
	int T;
	cin>>T;
	while(T--){
		string s;
		cin>>s;
		string result;
		int n=s.size();
		for(int i=0;i<n;i++){
			if(s[i]!='t') result+=s[i];
			else{
				if(s[i+1]=='t'){
					int j =i+1;
					while(s[j]=='t'){
						i=j;
						j++;
					}	
				}
				else result+=s[i];
			}
		}
		
		cout<<result<<endl;
	}
	return 0;
}

。。。。。。 

 

 实力有限,进了面试没拿到offer,留下此篇供后来人复习准备机试,祝一切顺利

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值