Advertisement
Zeinab_Hamdy

Untitled

Jul 17th, 2024
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.68 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define nl "\n"
  4. #define fi first
  5. #define se second
  6. #define pb push_back
  7. #define ll long long
  8. #define RV return void
  9. #define sz(x) int(x.size())
  10. #define all(v) v.begin(), v.end()
  11. #define rall(v) v.rbegin(), v.rend()
  12. #define fixed(n) fixed << setprecision(n)
  13. #define cin(v) for(auto&x:v) cin >> x;
  14. #define cout(v) for(auto&x:v) cout << x << " ";
  15. void files(){
  16.     #ifndef ONLINE_JUDGE
  17.        freopen("input.txt", "r", stdin);
  18.        freopen("output.txt", "w", stdout);
  19.     #endif
  20. }
  21.  
  22.  
  23. void solve(){
  24.  
  25.     int n ;
  26.     cin >> n ;
  27.     vector < int > v(n) ;
  28.     vector < pair < int , int > > idx(11 , {-1,-1});
  29.     vector < vector < int > > pref(n, vector<int>(10,0));
  30.  
  31.     for(int i=0 ;i < n ; i++){
  32.         cin >> v[i];
  33.  
  34.         if(idx[v[i]].fi ==-1)
  35.             idx[v[i]].fi = i;
  36.  
  37.         idx[v[i]].se=i;
  38.  
  39.         for(int j =0 ; j < 10 ; j++){
  40.             pref[i][j] += (v[i] == j);
  41.             if(i)
  42.                 pref[i][j] += pref[i-1][j];
  43.         }
  44.     }
  45.  
  46.  
  47.     vector < int > temp;
  48.     for(int i =0 ; i < 10 ; i++){
  49.         if(idx[i].fi!=-1) temp.pb(i);
  50.     }
  51.     int m = sz(temp);
  52.  
  53.     vector < vector < int > > to_try;
  54.  
  55.     for(int k =0 ; k < (1 << m ) ; k++){
  56.         vector<int> temp2;
  57.         for(int j =0 ; j < m ; j++){
  58.             if(k & (1 << j)){
  59.                 temp2.pb(temp[j]) ;
  60.             }
  61.         }
  62.         to_try.pb(temp2);
  63.     }
  64.  
  65.     auto comp=[&](auto a , auto b){
  66.         if(sz(a) == sz(b)) return a > b ;
  67.         return sz(a) < sz(b);
  68.     };
  69.  
  70.     sort(rall(to_try) , comp);
  71.     // for(auto&  x: to_try) {cout(x) ; cout << nl;}
  72.  
  73.     for(int i =0 ; i < n -1; i++){
  74.         int d = i+1;
  75.         for(auto& temp2 : to_try){
  76.             int cnt=sz(temp2);
  77.             vector < bool > vis(10,0);
  78.             for(auto& j : temp2) vis[j]=1;
  79.  
  80.  
  81.             bool flag=1;
  82.            
  83.  
  84.             for(auto& x : temp2){
  85.                 int cnt2=0;
  86.                 for(auto& q : temp)
  87.                     if(!vis[q])
  88.                          cnt2 += pref[idx[x].se][q] - pref[idx[x].fi][q];
  89.  
  90.                 if((idx[x].se - idx[x].fi - cnt2) > d) {
  91.                     flag=0;
  92.                     break;
  93.                 }
  94.             }
  95.  
  96.             if(flag){
  97.                cout << m-cnt <<" ";
  98.                break;
  99.             }
  100.         }
  101.     }
  102.  
  103.    
  104.    
  105. }      
  106.  
  107.  
  108.  
  109. int main(){
  110.     ios_base::sync_with_stdio(false);
  111.     cin.tie(nullptr);
  112.     cout.tie(nullptr);  
  113.     //  files();
  114.  
  115.     int testCase=1;
  116.         // cin >> testCase ;
  117.     for(int i=1 ; i <= testCase ; i++){
  118.         // cout << "Case "<< i <<": " << nl;
  119.         solve();
  120.     }
  121.  
  122.     return 0;
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement