首页 > 代码库 > codeforces 489B. BerSU Ball 解题报告
codeforces 489B. BerSU Ball 解题报告
题目链接:http://codeforces.com/problemset/problem/489/B
题目意思:给出 n 个 boys 的 skills 和 m 个 girls 的 skills,要求成 pair 的条件为,男和女的 skill 差值最多只能为 1。问成 pair 最多是多少。
这个不太难,关键是要考虑周全。
对于某个人,假设他(男)的 skill 值为 i,那么跟他成 pair 的人的 skill 值,只有三种:i-1,i,i+1。跟他成对的女要减少一个。然后女的那边也要搜一遍,再输出较大的就是答案了。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 using namespace std; 6 7 const int maxn = 100 + 5; 8 int a[maxn], b[maxn]; 9 10 int get_num(int ta[], int tb[])11 {12 int num = 0;13 for (int i = 1; i <= 100; i++)14 {15 if (ta[i])16 {17 for (int j = 0; j < ta[i]; j++)18 {19 if (tb[i-1])20 {21 tb[i-1]--;22 num++;23 }24 else if (tb[i])25 {26 tb[i]--;27 num++;28 }29 else if (tb[i+1])30 {31 tb[i+1]--;32 num++;33 }34 }35 }36 }37 return num;38 }39 40 int main()41 {42 #ifndef ONLINE_JUDGE43 freopen("in.txt", "r", stdin);44 #endif45 46 int n, m, input;47 while (scanf("%d", &n) != EOF)48 {49 memset(a, 0, sizeof(a));50 memset(b, 0, sizeof(b));51 52 for (int i = 0; i < n; i++)53 {54 scanf("%d", &input);55 a[input]++;56 }57 scanf("%d", &m);58 for (int i = 0; i < m; i++)59 {60 scanf("%d", &input);61 b[input]++;62 }63 int ans = 0;64 ans = max(get_num(a, b), get_num(b, a));65 printf("%d\n", ans);66 }67 return 0;68 }
codeforces 489B. BerSU Ball 解题报告
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。