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;
    }
    
    
  • 相关阅读:
    setInterval的停止与启动
    postgresql常用
    STM32学习笔记(四) RCC外设的学习和理解
    STM32学习笔记(九) 外部中断,待机模式和事件唤醒
    STM32的优先级的理解及其使用
    基于STM32的红外遥控重点解析
    红外协议之NEC协议
    常用运放选型一览表
    运放参数解释及常用运放选型
    算放大器分析----虚短和虚断(转载)
  • 原文地址:https://www.cnblogs.com/Sunshine-tcf/p/5697178.html
Copyright © 2011-2022 走看看