题目:Problem - 1515D - Codeforces
这是一道十分神奇的题目,找到规律之后直接暴力去遍历即可。
题目:
ac代码:
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
typedef long long int LL;
typedef pair<LL, LL> PII;
const int N = 2e5 + 10;
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
int n , m;
cin >> n;
cin >> n >> m ;
map<int,int> mp;
int x;
for(int i = 1; i <= n ; i ++)
{
cin >> x;
mp[x]++;
}
for(int i = 1; i <= m ; i ++)
{
cin >> x;
mp[x] -- ;
}
int ans = 0 ;
int num = 0 ;
vector<int> z , f ;
int zheng , fu ;
zheng = fu = 0 ;
for(auto it : mp)
{
if(it.second < 0)fu += it.second,f.push_back(it.second);
else if(it.first > 0)zheng += it.second,z.push_back(it.second);
}
ans += min(zheng,-fu);
int temp = zheng + fu;
if(temp > 0)
{
int num = 0 ;
for(auto it : z)
num += it/2 * 2;
if(num >= temp)
{
cout << ans + temp / 2 << endl;
}
else if(num < temp)
{
ans += num/2;
temp -=num;
ans += temp;
cout << ans << endl;
}
}
else if(temp < 0)
{
temp = - temp;
int num = 0 ;
for(auto it : f)
num += (-it)/2 * 2;
if(num >= temp)
cout << ans + temp / 2 << endl;
else if(num < temp)
{
ans += num/2;
temp -=num;
ans += temp;
cout << ans << endl;
}
}
else cout << ans << endl;
}
return 0 ;
}