M - 独木舟 (双指针)

n 个人,已知每个人体重 wi 。独木舟承重固定,每只独木舟最多坐两个人,即可以坐一个人或者两个人。显然要求每只独木舟承载的总重量不能超过独木舟的承重 m 。假设每个人体重也不超过 m ,问最少需要几只独木舟?

(其中 0 < n <1e4,  0

Input

第一行包含两个正整数 n,m ,表示人数和独木舟的承重。
接下来 n 行,每行一个正整数 wi ,表示每个人的体重。

Output

一行一个整数表示最少需要的独木舟数。

Sample 1

Inputcopy Outputcopy
3 6
1
2
3
2
#include
#include
#include
using namespace std;
#define scanf scanf_s;

const int N = 1e4 + 10;

int a[N];

int main()
{
	int n, m, sum = 0; cin >> n >> m;
	for (int i = 1; i <= n; i++) cin >> a[i];
	sort(a + 1, a + n + 1);
	int i = 1, j = n;

	while (i < j)
	{
		if (a[i] + a[j] <= m)
		{
			i++; j--;
			sum++;
		}
		else
		{
			j--;
			sum++;
		}
	}

	if (i == j) sum++;

	cout << sum << endl;
}

 

你可能感兴趣的:(算法,数据结构)