列表

详情


PDD3. 六一儿童节

描述

六一儿童节,老师带了很多好吃的巧克力到幼儿园。每块巧克力j的重量为w[j],对于每个小朋友i,当他分到的巧克力大小达到h[i] (即w[j]>=h[i]),他才会上去表演节目。老师的目标是将巧克力分发给孩子们,使得最多的小孩上台表演。可以保证每个w[i]> 0且不能将多块巧克力分给一个孩子或将一块分给多个孩子。

输入描述

第一行:n,表示h数组元素个数
第二行:n个h数组元素
第三行:m,表示w数组元素个数
第四行:m个w数组元素

输出描述

上台表演学生人数

示例1

输入:

3 
2 2 3
2
3 1 

输出:

1

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2021-07-19

#include <stdio.h>
#include <stdlib.h>

int compar(const void* a, const void* b) {
  return *(int*) a - *(int*) b;
}

int main(const int argc, const char** const argv) {
  int i, j, n, m, ans = 0;
  fscanf(stdin, "%d", &n);
  
  int h[n];
  for (i = 0; i < n; ++i)
    fscanf(stdin, "%d", h + i);
  
  fscanf(stdin, "%d", &m);
  
  int w[m];
  for (i = 0; i < m; ++i)
    fscanf(stdin, "%d", w + i);
  
  qsort(w, m, sizeof(int), compar);
  qsort(h, n, sizeof(int), compar);
  
  i = 0, j = 0;
  while (i < m && j < n) {
    if (w[i] >= h[j]) ++ans, ++j;
    ++i;
  }
  
  return fprintf(stdout, "%d", ans), 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 368KB, 提交时间: 2017-09-02



#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int n;
    cin>>n;
    vector<int>h(n);
    for(int i=0;i<n;i++){
        cin>>h[i];
    }
    int m;
    cin>>m;
    vector<int>w(m);
    for(int j=0;j<m;j++){
        cin>>w[j];
    }
    int res=0;
    sort(h.begin(),h.end());
    sort(w.begin(),w.end());
    for(int i=0,j=0;i<n&&j<m;j++){
        if(w[j]>=h[i]){
            res++;
            i++;
        }
    }
    cout<<res<<endl;
    return 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 368KB, 提交时间: 2017-08-06

#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
    int N,M,i,j;
    //freopen("input.txt","r",stdin);
    scanf("%d",&N);
    vector<int> child(N);
    for(i=0;i<N;i++) scanf("%d",&child[i]);
    scanf("%d",&M);
    vector<int> cho(M);
    for(i=0;i<M;i++) scanf("%d",&cho[i]);
    sort(child.begin(),child.end());
    sort(cho.begin(),cho.end());
    int res=0;
    for(i=0,j=0;i<M&&j<N;i++)
        if(cho[i]>=child[j])
            res++,j++;
    printf("%d\n",res);
}

C++ 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2017-08-08

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int n,m;
    cin>>n;
    int child[n];
    for(int i=0;i<n;i++){
        cin>>child[i];
	}
    cin>>m;
    int cho[m];
    for(int i=0;i<m;i++){
        cin>>cho[i];
	}
    int count=0;
    sort(child,child+n);
    sort(cho,cho+m);
    for(int k1=n-1,k2=m-1;k1>=0&&k2>=0;k1--)
        if(cho[k2]>=child[k1])
            {count++;k2--;}
    printf("%d",count);
    
}

C++ 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2017-08-07

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

class CandyStudent
{
public:
	int maxStudentNumber(vector<int> h, vector<int> w)
	{
		sort(h.begin(), h.end());
		sort(w.begin(), w.end());

		int count = 0;
		auto itr1 = h.begin();
		auto itr2 = w.begin();

		while(itr1 != h.end() && itr2 != w.end())
		{
			if (*itr2 >= *itr1)
			{
				itr2++;
				itr1++;
				count++;
			}
			else
			{
				itr2++;
			}
		}
		return count;
	}
};


int main(){
    int hnum;
    int wnum;
    vector<int> h;
    vector<int> w;
    cin >> hnum;
    h.resize(hnum);
    for (auto &i : h) cin >> i;    
    cin >> wnum;
    w.resize(wnum);
    for (auto &i : w) cin >> i;

    cout << CandyStudent().maxStudentNumber(h, w);
    return 0;
}

上一题