• CodeForces 489B BerSU Ball (贪心)


    BerSU Ball

    题目链接:

    http://acm.hust.edu.cn/vjudge/contest/121332#problem/E

    Description

    The Berland State University is hosting a ballroom dance in celebration of its 100500-th anniversary! n boys and m girls are already busy rehearsing waltz, minuet, polonaise and quadrille moves.

    We know that several boy&girl pairs are going to be invited to the ball. However, the partners' dancing skill in each pair must differ by at most one.

    For each boy, we know his dancing skills. Similarly, for each girl we know her dancing skills. Write a code that can determine the largest possible number of pairs that can be formed from n boys and m girls.

    Input

    The first line contains an integer n (1 ≤ n ≤ 100) — the number of boys. The second line contains sequence a1, a2, ..., an (1 ≤ ai ≤ 100), where ai is the i-th boy's dancing skill.

    Similarly, the third line contains an integer m (1 ≤ m ≤ 100) — the number of girls. The fourth line contains sequence b1, b2, ..., bm (1 ≤ bj ≤ 100), where bj is the j-th girl's dancing skill.

    Output

    Print a single number — the required maximum possible number of pairs.

    Sample Input

    Input
    4
    1 4 6 2
    5
    5 1 5 7 9
    Output
    3
    Input
    4
    1 2 3 4
    4
    10 11 12 13
    Output
    0
    Input
    5
    1 1 1 1 1
    3
    1 2 3
    Output
    2

    题意:

    n个男孩,m个女孩;每人各有一个权值;
    求最多能组成多少对男女,使得两人权值差不超过1.

    题解:

    排序后扫描一遍后就可以了,本质是贪心.

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <queue>
    #include <map>
    #include <set>
    #include <vector>
    #define LL long long
    #define eps 1e-8
    #define maxn 150
    #define inf 0x3f3f3f3f
    #define IN freopen("in.txt","r",stdin);
    using namespace std;
    
    int n,m;
    int a[maxn], b[maxn];
    
    int main(int argc, char const *argv[])
    {
        //IN;
    
        while(scanf("%d", &n) != EOF)
        {
            for(int i=1; i<=n; i++)
                scanf("%d", &a[i]);
            cin >> m;
            for(int i=1; i<=m; i++)
                scanf("%d", &b[i]);
            sort(a+1,a+1+n);
            sort(b+1,b+1+m);
    
            int i=1, j=1;
            int ans = 0;
            while(i<=n && j<=m) {
                if(abs(a[i]-b[j])<=1) {
                    ans++;
                    i++; j++;
                    continue;
                }
                if(a[i] > b[j]) j++;
                else if(a[i] < b[j]) i++;
            }
    
            printf("%d
    ", ans);
        }
    
        return 0;
    }
    
    
  • 相关阅读:
    jsp第六周作业
    jsp第三周作业
    JSP第二次作业
    软件测试课堂练习(3.4)
    10.21
    10.7
    9.30
    9.23
    第四次作业
    第七周作业
  • 原文地址:https://www.cnblogs.com/Sunshine-tcf/p/5697178.html
Copyright © 2020-2023  润新知