题意:给三个数组,问这三个数组中都出现的数字有多少次。(如果一个数在数组A中出现2次,在数组B中出现3次,在数组C中出现2次,那么这个数要计算2次)
multiset水题。
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <set> #include <vector> #include <map> #include <queue> #include <set> #include <algorithm> using namespace std; #define MAXN 5000 multiset <int> s[4]; multiset <int> ::iterator it,it1; int n1,n2,n3; int main() { while(~scanf("%d",&n1)){ for(int i=0;i<4;i++)s[i].clear(); for(int i=0,x;i<n1;i++){ scanf("%d",&x); s[0].insert(x); } scanf("%d",&n2); for(int i=0,x;i<n2;i++){ scanf("%d",&x); s[1].insert(x); } scanf("%d",&n3); for(int i=0,x;i<n3;i++){ scanf("%d",&x); s[2].insert(x); } int ans=0; for(it=s[0].begin();it!=s[0].end();it++){ it1=s[3].find(*it); if(it1!=s[3].end())continue; int num1=s[0].count(*it); int num2=s[1].count(*it); int num3=s[2].count(*it); ans+=min(num1,min(num2,num3)); } printf("%d\n",ans); } return 0; }
|