zoukankan      html  css  js  c++  java
  • 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;
    }
    
    
  • 相关阅读:
    hdu 2485 Destroying the bus stations 迭代加深搜索
    hdu 2487 Ugly Windows 模拟
    hdu 2492 Ping pong 线段树
    hdu 1059 Dividing 多重背包
    hdu 3315 My Brute 费用流,费用最小且代价最小
    第四天 下载网络图片显示
    第三天 单元测试和数据库操作
    第二天 布局文件
    第一天 安卓简介
    Android 获取存储空间
  • 原文地址:https://www.cnblogs.com/Sunshine-tcf/p/5697178.html
Copyright © 2011-2022 走看看