

Mn cho mình xin ý tưởng hay code với ạ. C++ hay Python gì cũng được ạ
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
Đáp án + Giải thích các bước giải:
`@` Ý tưởng:
`-` Ta sẽ duyệt qua từng bạn và tính số bạn ko cùng sở thích với bạn đang xét
`-` Ta có thể dễ dàng tính được số bạn ko cùng sở thích bằng cách lấy tổng số bạn(n) trừ số bạn cùng sở thích (có thể dùng đếm phân phối để tính nhanh)
`-` Với cách trên, mỗi cặp bạn ko thân ta đã tính `2` lần `=>` kết quả cần chia cho `2`
`@` Code:
`+` C++:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
ll n; cin>>n;
int a[n];
int cnt[n+1]={0};
for(int i=0;i<n;++i) cin>>a[i];
for(int i=0;i<n;++i) cnt[a[i]]+=1;
ll kq=0;
for(int i=0;i<n;++i){
int k=n-cnt[a[i]];
kq+=k;
}
kq/=2;
cout<<kq;
}
`+` Python:
n=int(input())
a=list(map(int,input().split()))
cnt=[0]*(n+1)
for i in a:
cnt[i]+=1
kq=0
for i in a:
k=n-cnt[i]
kq+=k
kq //= 2
print(kq)
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
`\color{pink}{#Bơ}`
`**` Ý tưởng
`-` Tổng số cặp học sin là: `n ** (n-1)//2`
`-` Cặp chơi thân nếu sở thích giống nhau.
`-` Với mỗi nhóm k người cùng sở thích, có `k ** (k-1)//2`
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
int n, a;
cin >> n;
vector<int> c(n + 1);
for (int i = 0; i < n; i++) {
cin >> a;
c[a]++;
}
ll t = 1LL * n * (n - 1) / 2, s = 0;
for (int x : c) s += 1LL * x * (x - 1) / 2;
cout << t - s;
}
`\color{#1AD5F7}{꧁⋆⟡T}\color{#1AD5F7}{D}\color{#4DA6E6}{u}\color{#668EDD}{n}\color{#8077D5}{g}\color{#995FCD}{G}\color{#EA2F90}{M⟡⋆꧂}`
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
Bảng tin

0
193
0
thanks