用数组代表每个人的能力
一个比赛活动要求 参赛团队的最低能力值为N
每个团队可以由一人或者两人组成
且一个人只能参加一个团队
计算出最多可以派出多少只符合要求的队伍
5
3 1 5 7 9
8
第一行代表总人数,范围 1~500000
第二行数组代表每个人的能力
数组大小范围 1~500000
元素取值范围 1~500000
第三行数值为团队要求的最低能力值
1~500000
3
最多可以派出的团队数量
示例一
输入
5
3 1 5 7 9
8
输出
3
说明 3、5组成一队 1、7一队 9自己一队 输出3
输入
7
3 1 5 7 9 2 6
8
输出
4
输入
3
1 1 9
8
输出
1
//
// Created by HANWENKE on 2022-09-20.
//
#include
#include
#include
#include
#include
using namespace std;
int main(){
int n;//表示有几个人
cin>>n;
vector<int>arr;
arr.reserve(n);
string temp;
cin.sync();
cin.clear();
getline(cin,temp);
istringstream stemp(temp);
int t;
while(stemp>>t){
arr.push_back(t);
}
cin.sync();
cin.clear();
int pow;
cin>>pow;
sort(arr.begin(),arr.end());
//找到数组中第一个大于pow的值--然后给一个新的数组
auto p= lower_bound(arr.begin(),arr.end(),pow);
vector<int>arr2;
for(auto it=arr.begin();it<p;it++){
arr2.push_back(*it);
}
int res=arr.size()-arr2.size();
int i=0,j=arr2.size()-1;
while(i<j){
if(arr2[i]+arr2[j]>=pow){
i++;
j--;
res++;
}else{
i++;
}
}
cout<<res;
return 0;
}
一个工厂有m条流水线
来并行完成n个独立的作业
该工厂设置了一个调度系统
在安排作业时,总是优先执行处理时间最短的作业
现给定流水线个数m
需要完成的作业数n
每个作业的处理时间分别为 t1,t2…tn
请你编程计算处理完所有作业的耗时为多少
当n>m时 首先处理时间短的m个作业进入流水线其他的等待
当某个作业完成时,
依次从剩余作业中取处理时间最短进入处理
第一行为两个整数(采取空格分隔) 输出处理完所有作业的总时长
分别表示流水线个数m和作业数n
第二行输入n个整数(采取空格分隔)
表示每个作业的处理时长 t1,t2…tn 0输入描述
样例
输入
3 5
8 4 3 2 10
输出
13
说明
先安排时间为2,3,4的三个作业
第一条流水线先完成作业
调度剩余时间最短的作业8
第二条流水线完成作业
调度剩余时间最短的作业10
总共耗时 就是二条流水线完成作业时间13(3+10)
输入
3 9
1 1 1 2 3 4 6 7 8
输出
13
C++代码
//
// Created by HANWENKE on 2022-09-20.
//
#include