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; }