can anyone help me in finding out the flaw in my code
I dont even have full set of test cases,i used the same logic as in the editorial.
my code goes here.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll abs(map<ll,ll>::iterator itr)
{
if(itr->second>=0)
return(itr->second);
else
return(-itr->second);
}
int main()
{
//#ifndef ONLINE_JUDGE
//freopen(“in.txt”,“r”,stdin);
//freopen(“pooc.txt”,“w”,stdout);
//#endif
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll t;
cin>>t;
for(ll i=0;i<t;i++)
{
map<ll,ll> m,ma,mb;
ll n;
cin>>n;
for(ll i=0;i<n;i++)
{
ll data;
cin>>data;
map<ll,ll>::iterator itr=ma.find(data);
if(itr==ma.end()){
ma.insert(pair<ll,ll>(data,1));
mb.insert(pair<ll,ll>(data,0));
}
else if(itr!=ma.end())
{
itr->second++;
}
}
for(ll i=0;i<n;i++)
{
ll data;
cin>>data;
map<ll,ll>::iterator itr=mb.find(data);
if(itr==mb.end()){
mb.insert(pair<ll,ll>(data,1));
ma.insert(pair<ll,ll>(data,0));
}
else if(itr!=mb.end())
{
itr->second++;
}
}
ll sum=0;
map<ll,ll>::iterator itr1=ma.begin();
map<ll,ll>::iterator itr2=mb.begin();
for(;itr1!=ma.end();itr1++)
{
m.insert(pair<ll,ll>((itr1->first),((itr1)->second-itr2->second)));
itr2++;
}
map<ll,ll>::iterator itr=m.begin();
while(itr!=m.end() && itr->second%2==0)
{
sum=sum+itr->second;
itr++;
}
if(sum!=0 || itr->second%2!=0){
cout<<"-1"<<endl;
sum=100000;
}
if(sum==0)
{
for(itr=m.begin();itr->second==0 && itr!=m.end();itr++)
{}
ll ans=0;
if(itr==m.end())
cout<<"0"<<endl;
if(itr!=m.end())
{
map<ll,ll>::iterator itr1,itr2;
itr1=m.begin();
for(itr1;itr1->second==0;itr1++)
{}
ll value=itr1->first;
itr2=m.end();
while(itr2!=m.begin() && itr1!=m.end())
{
if((itr1->second)*(itr2->second)<0)
{
if(abs(itr1)>abs(itr2) )
{
if(min(itr1->first,itr2->first)<(2*value)){
ans=ans+(min(itr1->first,itr2->first)*(min(abs(itr1->second),abs(itr2->second))/2));
}
else{
ans=ans+((value*2)*(min(abs(itr1->second),abs(itr2->second))/2));
}
itr1->second=itr1->second+itr2->second;
itr2->second=0;
itr2--;
}
else if(abs(itr2)>abs(itr1) )
{
if(min(itr1->first,itr2->first)<(2*value)){
ans=ans+(min(itr1->first,itr2->first)*(min(abs(itr1->second),abs(itr2->second))/2));
}
else{
ans=ans+((value*2)*(min(abs(itr1->second),abs(itr2->second))/2));
}
itr2->second=itr2->second+itr1->second;
itr1->second=0;
itr1++;
}
else if(abs(itr1)==abs(itr2))
{
if(min(itr1->first,itr2->first)<(2*value)){
ans=ans+(min(itr1->first,itr2->first)*(min(abs(itr1->second),abs(itr2->second))/2));
}
else{
ans=ans+((value*2)*(min(abs(itr1->second),abs(itr2->second))/2));
}
itr2->second=0;
itr1->second=0;
itr1++;
itr2--;
}
}
else if(itr1==itr2)
{
if(itr1->second>0)
itr2--;
else if(itr1->second<0)
itr1++;
}
else if(itr1->second<0){
itr1++;
}
else if(itr2->second>0){
itr2--;
}
else if(((itr1->second)*(itr2->second))==0){
if(itr1->second==0){
itr1++;
}
if(itr2->second==0){
itr2--;
}
}
}
cout<<ans<<endl;
}
}
}
return(0);
}