2 solutions

  • 0
    @ 2024-11-17 18:11:35
    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 200005;
    
    int a[N], b[N], c[N], st[N * 3];
    int n, m, cnt;
    int ans, res;
    map<int, int> s;
    
    int find(int x) { // 对当前的值进行离散化,并返回该值
        if(!s.count(x)) s[x] = ++ cnt;
        return s[x];
    } // 操作是log(n)的
    
    int main() {
        cin >> n;
        for(int i = 1; i <= n; i ++ ) {
            scanf("%d", &a[i]);
            a[i] = find(a[i]);
            st[a[i]] ++ ; // 对当前哈希值存入表中
        }
        cin >> m;
        for(int i = 1; i <= m; i ++ ) scanf("%d", &b[i]);
        for(int i = 1; i <= m; i ++ ) scanf("%d", &c[i]);
        //比较答案
        for(int i = 1; i <= m; i ++ ) {
            int x = find(b[i]);
            if(st[x] > res) ans = i, res = st[x];
            else if(st[x] == res) {
                int y = find(c[i]);
                if(st[y] >= st[find(c[ans])]) ans = i;
            }
        }
        cout << ans << endl;
        return 0;
    }
    
    • 0
      @ 2024-11-16 1:36:04
      #include<bits/stdc++.h>
      using namespace std;
      
      const int N = 2e5+11;
      
      int n, m;
      int ans = 1;
      int sum[3*N] = {0};
      int n_lang[N] = {0};
      
      struct language {
        int x;
        int y;
      }m_lang[N];
      
      vector<int> arr;
      vector<int> lang;
      
      
      int find(int x){
          
          int l = 0, r = arr.size();
          while(l < r){
              int mid = (l + r) >> 1;
              if(x > arr[mid]) l = mid + 1;
              else r = mid;
          }return l;
      }
      
      
      void work(){
          
          for(int i=0;i<n;i++) sum[find(n_lang[i])] ++;
          
          int maxx = 0, maxxx = 0;
          
          for(int i=0;i<m;i++){
              
              int k = find(m_lang[i].x);
              
              if(sum[k] > maxx){
                  
                  ans = i + 1;
                  maxx = sum[k];
                  maxxx = sum[find(m_lang[i].y)];
                  
              }
              if(sum[k] == maxx){
                  
                  int kk = find(m_lang[i].y);
                  if(sum[kk] >= maxxx){
                      ans = i + 1;
                      maxxx = sum[kk];
                  }
              }
          }return ;
      }
      
      
      int main(){
          
          scanf("%d",&n);
          for(int i=0;i<n;i++){
              scanf("%d",&n_lang[i]);
              lang.push_back(n_lang[i]);
          }
          
          scanf("%d",&m);
          for(int i=0;i<m;i++){
              scanf("%d",&m_lang[i].x);
              lang.push_back(m_lang[i].x);
          }
          for(int i=0;i<m;i++){
              scanf("%d",&m_lang[i].y);
              lang.push_back(m_lang[i].y);
          }
          
          
          sort(lang.begin(), lang.begin() + lang.size());
          
          for(int i=0;i<lang.size();i++){
              if(i)if(lang[i] == lang[i-1])continue;
              arr.push_back(lang[i]);
          }
          
          work();
          
          cout<<ans<<endl;
          
          return 0;
      }
      
      
      • 1

      Information

      ID
      499
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      9
      Tags
      (None)
      # Submissions
      24
      Accepted
      2
      Uploaded By