Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
XÓA SỐ Cho hai dãy số nguyên 𝐴 = (𝑎1 , 𝑎2 , … , 𝑎𝑚) và 𝐵 = (𝑏1 , 𝑏2 , … , 𝑏𝑛 ) Hãy tìm các xóa đi một số ít nhất các phần tử trong hai dãy số trên để thu được hai dãy số mới thỏa mãn: không có giá trị số nguyên nào có mặt trong cả hai dãy. Chú ý: Dãy sau khi xóa có thể rỗng. Dữ liệu: Vào từ file văn bản DELNUM.INP Dòng 1 chứa hai số nguyên dương 𝑚, 𝑛 ≤ 105 Dòng 2 chứa 𝑚 số nguyên dương 𝑎1 , 𝑎2 , … , 𝑎𝑚 cách nhau bởi dấu cách (∀𝑖: 𝑎𝑖 ≤ 109 ) Dòng 3 chứa 𝑛 số nguyên dương 𝑏1 , 𝑏2 , … , 𝑏𝑛 cách nhau bởi dấu cách (∀𝑗: 𝑏𝑗 ≤ 10 9 ) Kết quả: Ghi ra file văn bản DELNUM.OUT một số nguyên duy nhất là số phần tử phải xóa Ví dụ DELNUM.INP DELNUM.OUT
4 5 1 4 2 4 1 2 4 2 5 3
#include <bits/stdc++.h>
using namespace std;
long long a[1000009],b[1000009],n,m,s=0;
int main()
{
freopen("DELNUM.INP","r",stdin);
freopen("DELNUM.OUT","w",stdout);
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
map<long long, long long>L;
map<long long, long long>C;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=m;i++)
{
cin>>b[i];
C[b[i]]++;
}
sort(a+1,a+n+1);
sort(b+1,b+m+1);
int t,q;
for(int i=1;i<=n;i++)
{
if(L[a[i]]==0)
{
t = (upper_bound(a+1,a+n+1,a[i])-lower_bound(a+1,a+n+1,a[i]));
q = (upper_bound(b+1,b+m+1,a[i])-lower_bound(b+1,b+m+1,a[i]));
if(t>=q)
{
s+=q;
}else
{
s+=t;
}
L[a[i]]++;
}
}
cout<<s;
}
code em làm ở đây sai ở phần nào và cần phải thêm những trường hợp nào ạ, giúp em với
DELNUM.INP:
4 5
1 4 2 4
1 2 4 2 5
DELNUM.OUT
3