HLG 1710 给出三个集合a,b,c,统计集合a元素+集合b中元素=集合c中的元素的个数 (基础题)
来源:互联网 发布:特殊字体软件 编辑:程序博客网 时间:2024/04/27 14:13
链接: http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1710
Description
有A、 B、 C 三个集合的,其中a∈A, b ∈ B, c ∈ C,求有多少种方式使得a + b = c。
Input
有多组测试数据,请处理到文件结束。
对于每组测试数据,有三行:
第一行为A集合的描述,第一个数为n,表示A集合有n个数,接下来有n个整数a1~an。
第二行为B集合,第三行为C集合,表示含义参考第一行。
每个集合中的数两两不相等。
1<=n<=5000,|ai| <= 1 000 000 000
Output
对于每组测试数据,输出一行,包含一个整数,表示有多少种组合方式。
Sample Input
3 -10 4 -6
3 -10 3 -1
3 3 -4 -6
3 -8 -9 -4
3 9 -10 2
3 -8 -7 5
3 -4 -6 -2
3 9 -9 -2
3 3 -13 -4
Sample Output
2
2
3
代码如下:
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <set>#include <map>#include <vector>#include <algorithm>#define MAXN 5005#define RST(N)memset(N, 0, sizeof(N))using namespace std;int a[MAXN], b[MAXN], c[MAXN];int a_n, b_n, c_n, res;int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}void Init(){ RST(a), RST(b), RST(c), res = 0; for(int i=0; i<a_n; i++) scanf("%d", &a[i]); scanf("%d", &b_n); for(int i=0; i<b_n; i++) scanf("%d", &b[i]); scanf("%d", &c_n); for(int i=0; i<c_n; i++) scanf("%d", &c[i]); qsort(a, a_n, sizeof(a[0]), cmp); qsort(b, b_n, sizeof(b[0]), cmp);}void solve(){ for(int i=0; i<c_n; ++i) { for(int j=0, k=b_n-1; j<a_n && k>=0; ) { if(a[j] + b[k]> c[i]) k--; else if(a[j] + b[k]< c[i]) j++; else j++, k--, res++; } } printf("%d\n", res);}int main(){ while(~scanf("%d", &a_n)) { Init(), solve(); } return 0;}
0 0
- HLG 1710 给出三个集合a,b,c,统计集合a元素+集合b中元素=集合c中的元素的个数 (基础题)
- 找出集合中最大元素C,满足C=A+B,其中A,B都是集合中的元素
- 使用Lamdba 表达式 从A集合中去除不存在于B集合的元素加入到C集合中(快速找出两个集合中不同的元素)
- 查找在A集合但不在B集合中的元素
- 在整数集合S中寻找最大数整数C, 使 C = A + B,并且 A,B, C,都是S中的元素
- 在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- 在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- 在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- 在由N个正整数的集合S中,找出最大元素M,满足M=A + B,其中A,B都是集合S中元素
- 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
- [经典面试题][百度]在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- 【C#】删除集合里的元素
- 假设利用两个线性表La和Lb分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的 集合A=AUB。这就要求对线性表作如下操作:扩大线性表La,将存在于线性表Lb中而不存在于线
- 删除集合中的元素
- 遍历集合中的元素
- 已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={
- 集合中元素的删除
- 集合中元素的顺序
- listview,view 问题
- PHP网站静态化
- Facebook产品经理:PM应该是一位诚实的仆人
- linux下的web服务器压力测试工具之Siege
- 养生推荐:口腔溃疡食疗法
- HLG 1710 给出三个集合a,b,c,统计集合a元素+集合b中元素=集合c中的元素的个数 (基础题)
- Javascript 中 null、NaN和undefined的区别
- hud4517小小明系列故事——游戏的烦恼
- 神话歌词
- 直接读写磁盘扇区
- 内存泄露和内存溢出区别
- 驱动开发之 驱动程序中几个常见例程
- HTML入门教程
- 十一月一个下雨的早晨