独木舟(51Nod-1432)

题目

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

输入

第一行包含两个正整数n (0 接下来n行,每行一个正整数,表示每个人的体重。体重不超过1000000000,并且每个人的体重不超过m。

输出

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

输入样例

3 6
1
2
3

输出样例

2

思路:

首先对 n 个人的体重进行排序,然后第一个和最后一个相加,如果重量比船大,那么就将尾指针前移,头指针不动,船数+1,如果重量比船小,那么头指针、尾指针同时移动,船数+1,以此类推,直到所有人都上船。

源程序

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define EPS 1e-9
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
const int MOD = 1E9+7;
const int N = 1000000+5;
const int dx[] = {-1,1,0,0};
const int dy[] = {0,0,-1,1};
using namespace std;LL a[N];
int main() {LL n,m;scanf("%lld%lld",&n,&m);for(int i=1; i<=n; i++)scanf("%lld",&a[i]);sort(a+1,a+n+1);int left=1;int right=n;int res=0;while(left<=right) {if(a[left]+a[right]<=m)left++,right--;elseright--;res++;}printf("%d\n",res);return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部