紙コーダー未満

主に競技プログラミングについてです。Topcoder(togatogah)、Codeforces(togatoga)に参加してます。

AtCoder Regular Contest 024 A - くつがくっつく

寝てたらでるの忘れてたので後日解いた。

問題

二つの数列がL,Rが存在し、LとRの数列からペアを作り、最大のペア数を返す。

解法

Lの数列を固定してもう片方の数列Rとペアとなる値を全通り考える。

コード

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <complex>
#include <cstdlib>
#include <cstring>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <functional>

#define mp       make_pair
#define pb       push_back
#define all(x)   (x).begin(),(x).end()
#define rep(i,n) for(int i=0;i<(n);i++)

using namespace std;

typedef    long long          ll;
typedef    unsigned long long ull;
typedef    vector<bool>       vb;
typedef    vector<int>        vi;
typedef    vector<vb>         vvb;
typedef    vector<vi>         vvi;
typedef    pair<int,int>      pii;

const int INF=1<<29;
const double EPS=1e-9;

const int dx[]={1,0,-1,0},dy[]={0,-1,0,1};
int L,R;
int main(){
	cin>>L>>R;
	vector<int> left;
	vector<int> right;
	for(int i = 0;i < L;i++){
		int x;
		cin>>x;
		left.push_back(x);
	}
	for(int i = 0;i < R;i++){
		int x;
		cin>>x;
		right.push_back(x);
	}
	sort(left.begin(),left.end());
	sort(right.begin(),right.end());
	int cnt = 0;
	for(int i = 0;i < L;i++){
		for(int j = 0;j < R;j++){
			if(left[i] == right[j]){
				left[i] = 0;
				right[j] = 0;
				cnt++;
				break;
			}
		}
	}
	cout <<cnt<<endl;
	return 0;
}