严格顺序与非严格顺序
查看原帖
严格顺序与非严格顺序
259793
AliceJames楼主2023/8/6 18:50
#include <iostream>
using namespace std;
#include <cstdio>
#include <algorithm>


long long a[20010];
int N;
long long B;

bool cmp(const long long x1, const long long x2);

int main(){
	cin >> N >> B;
	for(int i = 0; i < N; i++)
		scanf("%lld", &a[i]);
	
	sort(a, a + N, cmp);
	
	long long sum = 0;
	int cnt = 0;
	for(int i = 0; i < N; i++){
		sum += a[i];
		cnt++;
		if(sum >= B)
			break;
	}
	
	cout << cnt << endl;
	
	return 0;
}

AC代码的cmp:

bool cmp(const long long x1, const long long x2){
	return x1 > x2;
}

85分的:

bool cmp(const long long x1, const long long x2){
	return x1 >= x2;
}

我的理解(85分)是如果x1与x2相等,那么没必要把x1移到x2后面(这种想法默认在比较时x1在前,如果二者相等就维持了原有顺序)


我发现在第10个测试点(20000头大象),如果用下面的cmp会使得a[0]为0,从a[1]开始降序排列,这是为什么呢?

2023/8/6 18:50
加载中...