Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
`*` Lùa bò phiên bản unordered_map =).
`*` Ta có: `a_i + a_j = k => a_i = k - a_j`
Vậy ta đếm số cặp `a_i = k - a_j` là xong.
$\texttt{C++}$
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(NULL);
cin.tie(0); cout.tie(0);
freopen("DEMCAP.inp", "r", stdin);
freopen("DEMCAP.out", "w", stdout);
unordered_map<long long, int> m;
long long n, res = 0;
long long k, a;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a;
res += m[k - a];
m[a]++;
}
cout << res;
return 0;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
#include <bits/stdc++.h>
using namespace std;
long long a[100009];
long long d[100009]={0};
map<long long,int>p;
int tknp(long long x,int l,int r)
{
while(l<=r)
{
int mid=(l+r)/2;
if(a[mid]==x)return mid;
else if(a[mid]<x)l=mid+1;
else r=mid-1;
}
return -1;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a[i];
p[a[i]]++;
}
sort(a,a+n);
long long back_up=1e10;
int cnt=0;
for(int i=0;i<n;i++)
{
if(a[i]!=back_up)
{
int vt=tknp(k-a[i],i,n-1);
if(vt!=-1&&d[vt]==0)
{
if(a[vt]!=a[i])cnt=cnt+(p[a[vt]]*p[a[i]]);
else cnt=cnt+(p[a[vt]]*(p[a[vt]]-1)/2);
d[vt]=1;
}
back_up=a[i];
}
}
cout<<cnt;
return 0;
}
Ta có Ai + Ạj = k => k-Aj=Ai
Sử dụng thuật toán tìm kiếm nhị phân với mỗi phần tử Ai trong dãy để tìm xem có phần tử Aj thõa mãn không
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin
2707
41668
2037
Bao h 20đ đề HN r phát tán
2707
41668
2037
Mới có 17 nên chưa phát đc
1464
18094
1143
:))
1464
18094
1143
kb đi
1464
18094
1143
nhan đó
2707
41668
2037
Rồi đó
1169
873
1077
https://hoidap247.com/cau-hoi/6707468 anh oi
1169
873
1077
cíu eim