笔试题——得物春招实习

开幕式排练
  • 题目描述

导演在组织进行大运会开幕式的排练,其中一个环节是需要参演人员围成一个环形。演出人员站成了一圈,出于美观度的考虑,导演不希望某一个演员身边的其他人比他低太多或者高太多。

现在给出n个参演人员的身高,问在他们站成一圈时,相邻演员的身高差的最大值至少是多少? 请你帮忙计算。

  • 输入输出描述

输入

输入包括两行,第一行有1个正整数,代表人数 n。

第二行有n个空格隔开的正整数h表示第i个演员的身高。

输出

输出包括一个正整数,表示答案。

  • 样例

输入:

5

2 1 1 3 2

输出:

1

  • 思路

可以采用贪心的思想,将身高从大到小排序,从第一个开始轮流放到(每两个相邻的)队列的两端,此种方法可以尽可能使得相邻身高差的最大值最小。

  • code
cpp 复制代码
#include<bits/stdc++.h>

using namespace std;

int n, m, k, t;
const int N = 1e5 + 10;
int a[N];

int main()
{
	cin >> n;
	
	for(int i = 0; i < n; i ++) cin >> a[i];
	sort(a, a + n);
	
	deque<int>q;
	bool flg = true;
	
	for(int i = 0; i < n; i ++)
	{
		if(flg) q.push_back(a[i]);
		else q.push_front(a[i]);
		
		flg = !flg;
	}
	
	int ans = abs(q.front() - q.back());
	for(int i = 1; i < n; i ++)
		ans = max(ans, abs(q[i] - q[i - 1]));
	
	cout << ans << "\n";
	
	return 0;	
} 
最少数字
  • 题目描述

小明用计算机随机生成了N个正整数,他希望从这N个数中选取若千个数,使得它们的和等于M。这些随机生成的数字可能会相同,但是每个数字最多只允许使用一次。

当然这样的选取方案可能不存在,也可能有多个。现在希望你编写一个程序,能够找出数字个数最少的选取方案,输出对应的最少数字的个数,如果无解输出"No solution"。

  • 输入输出描述

输入

单组输入,每组输入2行。

第1行包含两个正整数N和M,分别表示初始输入的正整数个数和目标数字和(N<=1e3,M<=1e5)。

第2行为N个正整数,两两之间用空格隔开(每一个正整数均小于等于1e5)。

输出

输出数字个数最少的选取方案中所包含的最少数字个数,如果无解输出"No solution"。

  • 样例

输入:

5 5

1 3 2 1 1

输出:

2

  • 思路

典型的背包问题的思路,对于每个数字可以有选和不选两种状态。

设定集合di, j的值为在前i个数字中选择,合成j的数字数。属性为集合的最小值。

当选择第i个数字时,di, j = di-1, j - v\[i] + 1;

当不选择第i个数字时,di, j = di-1, j

综上,可得di, j = min(di-1, j-v\[i] + 1, di-1, j)。

为了降低时间复杂度,可以通过滚动数组的思想来进行优化:

dj = min(dj, dj - v\[i] + 1)

  • code
cpp 复制代码
#include<bits/stdc++.h>

using namespace std;

int n, m, k, t;
const int N = 1e5 + 10, INF = 0x3f3f3f3f;
int a[N], f[N];

int main()
{
	memset(f, 0x3f, sizeof f);
	
	cin >> n >> m;
	for(int i = 1; i <= n; i ++) cin >> a[i];
	
	f[0] = 0;
	for(int i = 1; i <= n; i ++)
		for(int j = m; j >= a[i]; j --)
			f[j] = min(f[j], f[j - a[i]] + 1);
	
	if(f[m] >= INF / 2) puts("No solution");
	else cout << f[m] << "\n";
			
} 
相关推荐
Sw1zzle19 分钟前
算法入门(六):贪心算法 - 基础入门(Leetcode 121/455/860/376/738)
算法·leetcode·贪心算法
青山木27 分钟前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
不会就选b42 分钟前
算法日常・每日刷题--<归并排序>1
数据结构·算法
危桥带雨1 小时前
排序算法(快排、归并、计数、基数排序)
数据结构·算法·排序算法
啦啦啦啦啦zzzz1 小时前
算法:回溯算法
c++·算法·leetcode
IT探索1 小时前
Linux 查找文件指令总结
linux·算法
Lzg_na1 小时前
订阅发布模块事例
c++
郝学胜-神的一滴2 小时前
[简化版 GAMES 104] 现代游戏引擎 02:拆解现代游戏引擎5+1层级架构,吃透引擎底层核心逻辑
c++·unity·架构·游戏引擎·图形渲染·unreal engine·系统设计
汉克老师2 小时前
2026年CSP-J初赛分数线-----预测
c++·csp-j·小学生·学c++编程