2 solutions
-
0
#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
#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