【一维数组】1226:苹果摘陶陶

题目描述

去年苹果们被陶陶摘下来后都很生气,于是就用最先进的克隆技术把陶陶克隆了很多份,然后把他们挂在树上让苹果们摘。 
摘取的规则是:苹果们排好队轮流摘取,一个苹果只能摘一个陶陶,且只能摘在他所能摘到的高度以下(即是小于关系)的最高的陶陶,如果摘不到的话只能灰溜溜的走开。 
给出苹果数目及按苹果队伍的顺序给出每个苹果可以够到的高度和各个陶陶的高度,求苹果们都摘完后还剩下多少个陶陶…… 

输入

第一行为两个数,分别为苹果的数量n和陶陶的数量m(0<=n,m<=2000) 
以下的n行,分别为各个苹果能够到的最大高度。 
再接下来的m行,分别为各个陶陶的高度。高度均为大于0小于300的整数。

输出

输出仅有一个数,是剩下的陶陶的数量。

样例输入

复制

5 5
9
10
2
3
1
6
7
8
9
10
样例输出

复制

3

点个赞和关注别忘了

上代码!

#include
#include
#include
 
using namespace std;
 
int main() {
    int n, m;
    cin >> n >> m; // 输入苹果和陶陶的数量
 
    vector apples(n); // 存储苹果的高度
    for (int i = 0; i < n; ++i) {
        cin >> apples[i];
    }
 
    vector taos(m); // 存储陶陶的高度
    for (int i = 0; i < m; ++i) {
        cin >> taos[i];
    }
 
    // 将陶陶按高度从大到小排序
    sort(taos.begin(), taos.end(), greater());
 
    // 模拟摘取过程
    int remaining = m; // 初始剩余陶陶数量
    for (int i = 0; i < n; ++i) { // 遍历每个苹果
        for (int j = 0; j < taos.size(); ++j) { // 遍历陶陶
            if (taos[j] < apples[i]) { // 找到满足条件的陶陶
                taos.erase(taos.begin() + j); // 摘取该陶陶
                remaining--; // 剩余陶陶数量减 1
                break; // 每个苹果只能摘一个陶陶
            }
        }
    }
 
    cout << remaining << endl; // 输出剩余陶陶数量
    return 0;

你可能感兴趣的:(算法)