o.boj 1022 SuperRock钟爱的香蕉

注:最近这一系列ACM的内容,都是2年多之前的代码,自己回顾一下。

SuperRock钟爱的香蕉

Submit: 1494    Accepted:943 Time Limit: 1000MS  Memory Limit: 65536K
Description
Bupt的新水果店开张,有买一赠一的活动,即每买一只大小为A(1 <= A <= 1,000,000)的香蕉,他就能免费获得一只大小为B(1 <= B < A)的香蕉!
吝啬鬼SuperRock以及整个912实验室成员都喜欢香蕉,然而,这个活动是有规定的:大的一只香蕉必须是甜的,小的一只是不甜的。SuperRock并不在意:912里的都是狼,不管什么味道,香蕉总是一抢而光,他只想买最多的香蕉。
给出一组N(1 <= N <= 10,000)只甜香蕉的大小,M(1 <= M <= 10,000)只不甜的香蕉的大小,找出SuperRock最多能买多少只香蕉。注意:他能买甜的香蕉而不拿免费的不甜香蕉(店老板很高兴),但他不能直接买不甜的香蕉(就是说,他只能通过赠送来获得)。
神哪,救一救SuperRock,找一个办法尽可能的喂饱那些狼吧。


Input
第 1 行: 两个用空格分开的整数,N和M。
第 2 至 N+1 行: 第i+1行包含一个整数,是第i只甜香蕉的大小。
第 N+2 至 N+M+1 行: 第i+N+1行包含一个整数,是第i只不甜的香蕉的大小。


Output
第 1 行: SuperRock能买的最大的香蕉的只数。

Sample Input

3 4
6
1
3
1
5
3
4


Sample Output

5


Hint
显然,SuperRock能买所有的甜的香蕉。当他买了大小为6的甜香蕉,他可以免费拿任何一只不甜的香蕉(例如大小为3的)。当他买了大小为3的高质量香蕉,他可以拿大小为1的免费不甜的香蕉。然而当他买了大小为1的甜干草,就不能拿不了免费香蕉了(因为大小必须严格小于)。这样,尽管SuperRock很聪明,但他最多也只能拿5只香蕉了。

Source
moyuji@BUPT
 
 
 
甜的都要买,就看能送多少只。先按大小分别排序,从甜香蕉从大到小的遍历,同样地换一个能换的最大的不甜的香蕉。
 
#include <iostream>

using namespace std;

bool cmp(int a, int b)  {   return (a > b);     }

int main ()
{
    int N, M, Sweet[10000], NSweet[10000], count, pos, flag;
    
    cin >> N >> M;
    
    for (int i = 0; i < N; i++)  {    cin >> Sweet[i];    }
    for (int i = 0; i < M; i++)  {    cin >> NSweet[i];   }
    
    sort(Sweet, Sweet + N, cmp);
    sort(NSweet, NSweet + M, cmp);
    
    pos = 0;
    count = N;
    flag = 1;
    
    for (int i = 0; i < N && flag; i++)
    {
        int j;
        for (j = pos; NSweet[j] >= Sweet[i] && j < M; j++) {;}
        
        if (j == M)
            flag = 0;
        else
        {
            pos = j + 1;
            count += 1;
        }
    }
    cout << count << endl;
    // system("pause");
    return 0;
}


你可能感兴趣的:(活动,System,input,n2,output)