https://www.codechef.com/viewsolution/35357027
I don’t know why it is not working.
please help
anyone help me where i’m wrong
Can you explain your logic because I don’t understand what you’ve done?
If you want to solve the problem, you can use hashing.
first i compared two lists and found the similar elements in them.
and then i used a array ‘c’ which has 1 to 100 and and traversed through a and b and made the elements which present in a and b and c as ‘0’ and i found the count of ‘c’ in which the numbers are not equal to 0.
So, basically your fast task is to find common elements in both arrays:
Consider this piece of code-
for(int i=0;i<m;i++)
{
for(int j=i;j<k;j++)
{
if(a[i]==b[j]){
cnt++;
break;
}
}
}
You can check why above fails by using this test case-
array 1 =[1,2,3,4,5]
array2=[6,5,4,3,2,1]
It should be-
for(int i=0;i<m;i++)
{
for(int j=0;j<k;j++)
{
if(a[i]==b[j]){
cnt++;
break;
}
}
}
This is O(M \cdot N) Solution. You can optimize it by hashing in O(N+M+K).
You can take a look at this solution and try to understand-
#include <bits/stdc++.h>
#define int long long
using namespace std;
main() {
int t;
cin>>t;
while(t--){
int n,m,k;
cin>>n>>m>>k;
//array of size n; if ith file is ignored then ignored[i]=True else False. Intially we are assuming all files are unignored.
bool ignored[n+1]={0};
//array of size n; if ith file is tracked then tracked[i]=True else False. Intially we are assuming all files are untracked.
bool tracked[n+1]={0};
for(int i=0;i<m;i++){
int var;
cin>>var;
ignored[var]=1;
}
for(int i=0;i<k;i++){
int var;
cin>>var;
tracked[var]=1;
}
int ans1=0;
int ans2=0;
for(int i=1;i<=n;i++){
if(ignored[i] && tracked[i]){ans1++;}
else if(!ignored[i] && !tracked[i]){ans2++;}
}
cout<<ans1<<" "<<ans2<<endl;
}
}
Time Complexity- O(N+M+K).