https://www.luogu.com.cn/problem/P1094
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <sstream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
template<typename DataType>
DataType qmi(DataType m, int k)
{
DataType res = 1, t = m;
while (k)
{
if (k&1) res = res * t;
t = t * t;
k >>= 1;
}
return res;
}
int read(){
int x = 0,f = 1;
char c = getchar();
while (c<'0'||c>'9') {
if (c=='-') {
f = -1;
}
c = getchar();
}
while (c>='0'&&c<='9') {
x = x*10+c-'0';
c = getchar();
}
return x*f;
}
#define fi(a,b) for(int i = a; i <= b; i++)
#define fj(a,b) for(int j = a; j >= b; j--)
void quickSort(int *a,int left,int right){
int i,j;
int temp,t;
temp = a[(left+right)/2];//基准值
i = left;
j = right;
while(i<=j){
while (a[j] > temp) {
j--;
}
while (a[i] < temp) {
i++;
}
if (i<=j) {
t = a[i];
a[i] = a[j];
a[j] = t;
//继续下一步
i++;
j--;
}
}
if(left<j)quickSort(a,left, j);//继续分治
if(i<right)quickSort(a,i, right);//继续分治
}
int w,n,map[30005],ans = 0;
int main(){
//输入部分
w = read();
n = read();
fi(1, n){
map[i] = read();
}
//排序,然后一一匹配
quickSort(map, 1, n);
// fi(1, n){
// cout<<map[i]<<"\t";
// }
int i = 1, j = n;
while (i<=j) {
if(i==j){
ans++;
//cout<<map[j]<<endl;
break;
}
if(map[i] + map[j]<=w){
//cout<<map[i]<<" "<<map[j]<<endl;
ans++;
i++;
j--;
} else {
//cout<<map[j]<<endl;
ans++;
j--;
}
}
cout<<ans;
}
/*
100
9
90
20
20
30
50
60
70
80
90
20+90! 90
20+90! 90
20+80
20+70
30+60
50
============
6
*/
网友评论