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;
    }
    
    
  • 相关阅读:
    下载linux历史版本
    CentOS7 常用命令集合
    oracle初级系列教程
    redis内存数据的持久化方式
    使用Spring 或Spring Boot实现读写分离( MySQL实现主从复制)
    三个线程ABC,交替打印ABC
    wait,notify,notifyAll详细介绍
    索引优化分析
    Git常用命令使用大全
    长连接 、短连接、心跳机制与断线重连(转载)
  • 原文地址:https://www.cnblogs.com/Sunshine-tcf/p/5697178.html
Copyright © 2011-2022 走看看