独木舟上的旅行
时间限制:3000 ms | 内存限制:65535 KB
难度:2
输入
第一行输入s,表示测试数据的组数;
每组数据的第一行包括两个整数w,n,80<=w<=200,1<=n<=300,w为一条独木舟的最大承载量,n为人数;
接下来的一组数据为每个人的重量(不能大于船的承载量);
输出
每组人数所需要的最少独木舟的条数。
样例输入
3 85 6 5 84 85 80 84 83 90 3 90 45 60 100 5 50 50 90 40 60
样例输出
5 3 3
描述
思路:
这道题是我第三次遇到了,每次都有不同的想法,每次也都写的更简便易懂,从最初的一堆标记到现在的直接遍历,确实海星,算是见证了我的进步吧,以前也发过一篇,是故思路就不写了,这次的代码有些不同,个人感觉更简便了
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = (int)1e6 + 10;
int num[maxn];
int main()
{
int n,m,ans = 0;
scanf("%d %d",&n,&m);
for (int i = 0;i < n;i ++)
scanf("%d",&num[i]);
sort(num,num + n);
int l = 0,r = n - 1;
while (l <= r)
{
if (num[l] + num[r] <= m)
{
ans ++;
l ++;
r --;
}
else
{
ans ++;
r --;
}
}
printf("%d\n",ans);
return 0;
}