PDD3. 六一儿童节
描述
六一儿童节,老师带了很多好吃的巧克力到幼儿园。每块巧克力j的重量为w[j],对于每个小朋友i,当他分到的巧克力大小达到h[i] (即w[j]>=h[i]),他才会上去表演节目。老师的目标是将巧克力分发给孩子们,使得最多的小孩上台表演。可以保证每个w[i]> 0且不能将多块巧克力分给一个孩子或将一块分给多个孩子。输入描述
第一行:n,表示h数组元素个数输出描述
上台表演学生人数示例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; }