Rút gọn tập hợp số nguyên


Submit solution

Points: 2 (partial)
Time limit: 1.0s
Python 3 2.0s
Memory limit: 98M
Python 3 977M

Author:
Problem type
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG

Cho dãy số nguyên \(a_1,a_2, ... ,a_N\), nhiệm vụ của bạn là rút gọn tập hợp số này sao cho những phần tử trùng nhau chỉ giữ lại một phần tử đầu tiên, những phần tử xuất hiện sau thì loại bỏ hết.

Input

Dòng đầu tiên chứa số nguyên dương \(N\) là số phần tử của dãy \((N \le 10^6)\). Dòng tiếp theo chứa N số nguyên sao cho \( -32768 < a_i <32768 \).

Output

Dãy số sau khi rút gọn

Example 1

Input

10
1 9 0 0 1 5 -7 0 -7 9

Output

 1 9 0 5 -7
tichpx

Comments


  • 0
    Đố_anh_bắt_đc_e  commented on April 3, 2023, 4:12 a.m. edit 2
    import java.util.LinkedHashSet;
    import java.util.Scanner;
    
    public class main {
        public static void main(String[] args) {
            LinkedHashSet<Integer> set = new LinkedHashSet<>();
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            for(int i = 1; i <= n; i++) {
                set.add(sc.nextInt());
            }
            for(int it : set)
                System.out.print(it + " ");
        }
    }

    cho e hỏi sao sai vậy ạ, e yếu java nên k bt sao cứ bị TLE, còn dùng set trong c++ vẫn AC


  • 0
    SANG_CNTT1_K61  commented on Oct. 7, 2021, 9:34 a.m. edited

    Cho em hỏi chỗ sai với ạ :))

    #include"bits/stdc++.h"
    using namespace std;
    
    int main()
    {
      int n;
      cin>>n;
      unordered_set<int> s;
      for(int i=0;i<n;i++){
        int x; cin>>x;
        s.insert(x);
      }
    
      stack <int> o ;
      for(int x:s){
        o.push(x);
      }
      while(o.size()){
        cout<<o.top()<<" ";
        o.pop();
      }
    return 0;
    }

    • 1
      TICHPX  commented on Oct. 9, 2021, 12:19 p.m.

      Cái unordered_set kết hợp với stack nó in ra đúng các phần tử nhưng thứ tự thì không đúng với yêu cầu của đầu bài là Phần tử nào xuất hiện trước phải in ra trước


  • -1
    LãoTam  commented on Sept. 30, 2021, 9:52 a.m. edited

    [user:^_^]Tham khảo

    #include<bits/stdc++.h>
    #include<iostream>
    using namespace std;
    
    int main()
    {
          ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
        int n;
        int x;
        int a[1000];
     map<int, bool> M;
    cin>>n;
        for(int i=0;i<n;i++)
        {
        cin>>a[i];
            M[a[i]]++;
    
        for(int i=0;i<n;i++)
        {
        if(M[a[i]]!=0){//b1:kiem tra a[i] da xuat hien chua neu chua se xuat con da in ra thi ko xuat lai
            cout<<a[i]<<" ";//b2:in ra ptu a[i] giua vào tân suat xh cua map a[i]
            M[a[i]] = 0;    //khi a[i] da xuat thi tan suat map cua a[i] se cho =0 và quay lai b1 
        }   
    
            }
    
    return 0;
    }
    }

    ý tưởng của mình là như thế này các bạn thay cout vs cin thành scanf và printf sẽ AC :((


  • 0
    Hoan_CNTT_VA2_K61  commented on May 18, 2021, 7:22 p.m.

    Cho e hỏi làm sao để Output ra theo đúng thứ tự như đề bài ạ. Dùng map nó tự sắp xếp lại rồi


    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL);
        int n;
        cin >> n;
        map<int,int>A;
        for(int i=0;i<n;i++){
            int x;
            cin >> x;
            A[x]++;
        }
        for(auto p:A){
            cout << p.first << " ";
        }
        return 0;
    }

    • 1
      TICHPX  commented on May 19, 2021, 5:45 a.m.

      Dùng map<int,bool> thằng nào có rồi thì ko out còn chưa có thì out, sau đó cho vào map


    • 3
      CThành_CNTT6_K61  commented on May 19, 2021, 2:55 a.m.

      bạn/anh cứ duyệt theo mảng ban đầu ở vòng for thứ 2, phần tử nào in r thì cho A[x[i]] = -1 để làm điều kiện đã in phần tử này là đc


  • 2
    DuyAnhhh  commented on Sept. 23, 2020, 1:23 p.m.

    Code bạn chạy nhiều vòng lặp quá,bài này bạn có thể sử dụng map để đánh dấu những số đã xuất hiện rồi nhé :3


    • -1
      minyoongi  commented on Oct. 4, 2020, 3:03 p.m. edited
      #include<bits/stdc++.h>
      using namespace std;
      const int MAX=1e6;
      int a[MAX];
      int main()
      {
         ios_base::sync_with_stdio(0);
         cin.tie(NULL);
         cout.tie(NULL);
         int n;
         cin>>n;
         map<int,int> cnt;
         for(int i=0;i<n;i++)
         {
           cin>>a[i];
           cnt[a[i]]++;
         }
         for(auto it:cnt)
         {
          cout<<it.first<<" ";
         }
      
      
      
      }

  • 1
    minyoongi  commented on Sept. 23, 2020, 12:48 p.m.

    ai xem hộ code mình bị lỗi tg ạ


  • 0
    minyoongi  commented on Sept. 23, 2020, 12:48 p.m. edited
    #include<bits/stdc++.h>
    using namespace std;
    const int MAX=1e6;
    int a[MAX];
    int main()
    {
       ios_base::sync_with_stdio(0);cin.tie(NULL); cout.tie(NULL);
       int n;
       cin>>n;
       for(int i=1;i<=n;i++)
       cin>>a[i];
       for(int i=1;i<n;i++)
       {
        for(int j=i+1;j<=n;j++)
        {
            if(a[i]==a[j])
            {
                int tg=j;
                for(int k=tg+1;k<=n;k++)
                {
                    a[k-1]=a[k];
                }
                n--;
            }
        }
        }
        for(int i=1;i<=n;i++)
        cout<<a[i]<<" ";
    }