编程题

(郊游活动)有n名同学参加学校组织的郊游活动,已知学校给这n名同学 的郊游总经费为A元,与此同时第 i 位同学自己携带了Mi元。为了方便郊游, 活动地点提供B(≥n)辆自行车供人租用,租用第j 辆自行车的价格为Cj元, 每位同学可以使用自己携带的钱或者学校的郊游经费,为了方便账务管 理,每位同学只能为自己租用自行车, 且不会借钱给他人, 他们想知道最多 有多少位同学能够租用到自行车。(第四、五空2.5分,其余3分)

本题采用二分法。对于区间[l, r] ,我们取中间点mid并判断租用到自行车的人数能否达到mid。判断的过程是利用贪心算法实现的。


#include

using namespace std;

#define MAXN 1000000


int n, B, A, M[MAXN], C[MAXN], l, r, ans, mid;


bool check(int nn) {

\tint count = 0, i, j;

\ti = (1) ;

\tj = 1;

\twhile (i <= n) {

\t\tif ( (2) )

\t\t\tcount = C[j] - M[i];

\t\ti ;

\t\tj ;

\t}

\treturn (3) ;

}


void sort(int a[], int l, int r) {

\tint i = l, j = r, x = a[(l r) / 2], y;

\twhile (i <= j) {

\t\twhile (a[i] < x) i ;

\t\twhile (a[j] > x) j--;

\t\tif (i <= j) {

\t\t\ty = a[i]; a[i] = a[j]; a[j] = y;

\t\t\ti ; j--;

\t\t}

\t}

\tif (i < r) sort(a, i, r);

\tif (l < j) sort(a, l, j);

}


int main() {

\tint i;

\tcin >> n >> B >> A;

\tfor (i = 1; i <= n; i )

\t\tcin >> M[i];

\tfor (i = 1; i <= B; i )

\t\tcin >> C[i];

\tsort(M, 1, n);

\tsort(C, 1, B);

\tl = 0;

\tr = n;

\twhile (l <= r) {

\t\tmid = (l r) / 2;

\t\tif ( (4) ) {

\t\t\tans = mid;

\t\t\tl = mid 1;

\t\t} else

\t\t\tr = (5) ;

\t}

\tcout << ans << endl;

\treturn 0;

}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论