HLG 1710 给出三个集合a,b,c,统计集合a元素+集合b中元素=集合c中的元素的个数 (基础题)

链接: 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;
}

HLG 1710 给出三个集合a,b,c,统计集合a元素+集合b中元素=集合c中的元素的个数 (基础题)

时间: 2024-11-08 23:49:21

HLG 1710 给出三个集合a,b,c,统计集合a元素+集合b中元素=集合c中的元素的个数 (基础题)的相关文章

【转】一个数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字。

转自:http://zhedahht.blog.163.com/ 题目:一个数组中有三个数字a.b.c只出现一次,其他数字都出现了两次.请找出三个只出现一次的数字. 分析:在博客http://zhedahht.blog.163.com/blog/static/2541117420071128950682/中我们讨论了如何在一个数组中找出两个只出现一次的数字.在这道题中,如果我们能够找出一个只出现一次的数字,剩下两个只出现一次的数字就很容易找出来了. 如果我们把数组中所有数字都异或起来,那最终的结

找出三个只出现一次的数字 C语言实现

题目:一个数组中有三个数字a.b.c只出现一次,其他数字都出现了两次.请找出三个只出现一次的数字. 分析:如果我们把数组中所有数字都异或起来,那最终的结果(记为x)就是a.b.c三个数字的异或结果(x=a^b^c).其他出现了两次的数字在异或运算中相互抵消了. 我们可以证明异或的结果x不可能是a.b.c三个互不相同的数字中的任何一个. 由于x与a.b.c都各不相同,因此x^a.x^b.x^c都不等于0. 我们定义一个函数f(n),它的结果是保留数字n的二进制表示中的最后一位1,而把其他所有位都变

c语言代码编程题汇总:找出三个数据中最大的数值

找出三个数据中最大的数值 程序代码如下: 1 /* 2 2017年3月9日12:04:37 3 功能:找出三个数据中最大的数值 4 */ 5 #include"stdio.h" 6 7 int fun(int,int,int); 8 9 int main() 10 { 11 int a ,b,c; 12 13 printf("please input three number: \n"); 14 15 scanf("%d %d %d",&

利用鼠标点击绘制出三棱锥

作者:feiquan 出处:http://www.cnblogs.com/feiquan/ 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*) 大家可以先看下我的上一篇文章:对于单个模型(长方体为例)进行面投影时的消隐           http://www.cnblogs.com/feiquan/p/8213875.html 这两篇有相

(一)在Lingo中使用集合

1.    在Lingo中使用集合 4.1 集合的基本用法和lingo模型的基本要素 Lingo虽然使用方便,但是如果要解决几万个,几十万个变量的优化问题时,我们总不能一个一个地列出x1,x2,…,x1000来解决,而这样的问题在实际企业的应用中也是经常遇到的.好在Lingo中设计了集合语言来表示大规模变量的输入,只需一行文字就可以建立起含有大规模变量的目标函数和成千上万条约束.而Lingo的早期版本软件Lindo却不包含这样的功能. 现通过下例来对Lingo的集合.属性概念进行介绍. 例2 S

【坑】这些天刷基础题犯的诡异错误大集合

这些天刷基础题犯的诡(sha)异(bi)错误大集合 by pkl ———其中可能会有部分资料引用,引用会表明链接,如果没有标明敬请指出QAQ抱歉QAQ---------------------------------- 首先安利一发帖子:OI中有哪些常数优化的小技巧 ps:注意是基础题.所以嘛错误nc需要原谅..毕竟我也是蒟蒻QAQAQ大蒟蒻QAQ · 循环里的临时变量出了循环便无效· 递归的临时变量不要定成全局变量· 赋值的对象不要一不小心手抖写反了…比如b = a写成a = b[估计也只有我

java中各种集合的用法和比较

一,java中各种集合的关系图 Collection       接口的接口     对象的集合 ├ List             子接口         按进入先后有序保存   可重复 │├ LinkedList    接口实现类     链表     插入删除   没有同步   线程不安全 │├ ArrayList     接口实现类      数组     随机访问   没有同步   线程不安全 │└ Vector        接口实现类       数组              

30、Java中Set集合之HashSet、TreeSet和EnumSet

Set集合是Collection的子集,Set集合与Collection基本相同,没有提供任何额外的方法,只是Set不允许包含重复的元素. Set集合3个实现类:HashSet.TreeSet.EnumSet 一.HashSet public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, java.io.Serializable HashSet是Set接口的典型实现,HashSet

将form表单元素转为实体对象 或集合 -ASP.NET C#

简介: 做WEBFROM开发的同学都知道后台接收参数非常麻烦 虽然MVC中可以将表单直接转为集实,但不支持表单转为 LIST<T>这种集合 单个对象的用法: 表单: <input name='id' value='1' > <input name='sex' value='男' > 后台: //以前写法 DLC_category d = new DLC_category(); d.sex = Request["sex"]; d.id = Conver