Có một hòn đảo rất đẹp thu hút nhiều khách du lịch đến thăm. Trên đảo có N người thuộc nhiều bộ tộc sinh sống, dân cư sống trên đảo rất thân thiện. Mỗi người thuộc 1 bộ tộc nào đó, trong đoàn du lịch có một nhà nhân chủng học, tranh thủ dịp may được ghé thăm đảo ông không bỏ phí thời gian tiến hành khảo sát. Ông gặp từng người trên đảo với 1 câu hỏi duy nhất" Trên đảo bộ tộc của bạn có bao nhiêu người" . Từ kết quả khảo sát, ông đã xác định được số bộ tộc khác nhau tồn tại trên đảo Ví dụ với N=10 và các câu trả lời là 5,9,2,5,6,2,5,2,2,3 ta có thể suy ra là trên đảo có 5 bộ tộc khác nhau YÊU CẦU: Cho N và các câu trả lời. Hãy xác định số bộ tộc trên đảo Dữ liệu vào: - Dòng 1 chứa số nguyên N (1<N<3.10^6) -Mỗi dòng trong N dòng tiếp theo chứa một số tự nhiên M là câu trả lời nhận được từ mỗi người với 0<M<=3.10^5 VD BOTOC.INP BOTOC.OUT 10 5 5 9 2 5 6 2 5 2 2 3 thuật giải: xóa các số trùng nhau và đếm có bao nhiêu số thì đó chính là số bộ tộc trên đảo AI GIÚP EM VỚI

2 câu trả lời

đó

#include <bits/stdc++.h>
using namespace std;
long long i,n,a[100005],b[100005],s,m;
int main()
{
    cin>>n;
    for (i=1;i<=n;++i)
    {
        cin>>a[i];
        b[a[i]]++;
        if(b[a[i]]==a[i])
        {s++;b[a[i]]=0;}
        if(a[i]>m) m=a[i];
    }
    for (i=1;i<=m;++i)
        if (b[i]>0) s++;
    cout<<s;
}
    

#include <bits/stdc++.h>
#define vi vector<int>
#define fd(var, start, end) for(int var = start; var <= end; var++)
#define endl '\n'
using namespace std;
int n, c;
vi mp;
signed main()
{
 ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
 cin >> n;
 mp.assign(n + 2, 0);
 c = 0;
 fd (i, 1, n)
    {
        int x;
        cin >> x;
        mp[x]++;
    }
    fd (i, 1, n)
        c += mp[i] / i;
 cout << c;
 return 0;
}