游客 Signup | Login
中文 | En

3031 - 集合加法

给出2个正整数集合A = {pi | 1 <= i <= a},B = {qj | 1 <= j <= b}和一个正整数s。问题是:使得pi+ qj = s的不同的(i, j)对有多少个。

Input

第1行是测试数据的组数n,后面跟着n组测试数据。

每组测试数据占5行,第1行是和s (1 <= s <= 10000),第2行是一个正整数a (1 <= a <= 10000),表示A中元素的数目。第3行是a个正整数,每个正整数不超过10000,表示A中的元素。第4行是一个正整数b (1 <= b <= 10000),表示B中元素的数目。第5行是b个正整数,每个正整数不超过10000,表示B中的元素。

注意:这里的集合和数学书上定义的集合有一点点区别——集合内可能包含相等的正整数。

Output

n行,每行输出对应一个输入。输出应是一个非负整数。

Examples

Input

2
99
2
49 49
2
50 50
11
9
1 2 3 4 5 6 7 8 9
10
10 9 8 7 6 5 4 3 2 1

Output

4
9

Solution C

#include<stdio.h>
int n,i,j,s,x,y,sum,a[10010],b[10010];
int main()
{
	scanf("%d",&n);
	while(n--)
	{
		sum=0;
		scanf("%d%d",&s,&x);
		for(i=1;i<=x;i++)
		    scanf("%d",&a[i]);
		scanf("%d",&y);
		for(i=1;i<=y;i++)
		    scanf("%d",&b[i]);
		for(i=1;i<=x;i++)
		    for(j=1;j<=y;j++)
		        if(a[i]+b[j]==s) sum++;
		printf("%d\n",sum);
	}
	return 0;
}

Solution C++

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
int a1[10010],b1[10010];
using namespace std;

int main()
{
    int t;
    cin>>t;
    while(t--) {
        int a,b,sum;
        int k=0;
        cin>>sum>>a;
        for(int i=0; i<a; i++)
            cin>>a1[i];
        cin>>b;
        for(int i=0; i<b; i++)
            cin>>b1[i];
        for(int i=0; i<a; i++)
            for(int j=0; j<b; j++)
                if(a1[i]+b1[j]==sum)
                    k++;
        cout<<k<<endl;
    }
    return 0;
}

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题