QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#610651 | #8332. Two in One | rxzfn639 | WA | 0ms | 3612kb | C++23 | 1.9kb | 2024-10-04 16:50:34 | 2024-10-04 16:50:35 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define pii pair<int, int>
#define pb push_back
int n;
ll get_id(int x){
ll t = -1;
while(x){
t++;
x >>= 1;
}
return t;
}
void slv(){
int n;
cin >> n;
vector<ll> a(n + 1), cnt(n + 1);
int f = 1;
for(int i = 1; i <= n; ++i) cin >> a[i];
for(int i = 2; i <= n; ++i) if(a[i] != a[i - 1]) f = 0;
if(f){cout << n << '\n'; return;}
for(int i = 1; i <= n; ++i) cnt[a[i]]++;
ll _ans = 0;
ll id = -1, sum = 0, p = -1;
for(int i = 1; i <= n; ++i){
if(cnt[i] == 0) continue;
_ans = max(_ans, cnt[i]);
id = max(id, get_id(cnt[i]));//cnt表示出现次数,我们要找位最高的
}
for(int i = 1; i <= n; ++i){
if(get_id(cnt[i]) == id) {
sum++, p = i;//i出现次数最高
}
}
if(sum > 1){
for(int j = 0; j <= id; ++j) _ans = _ans + (1 << j);
cout << _ans << '\n';
return ;
}
//p是最高的id
for(int i = 1; i <= n; ++i){
ll ans = 0;
if(cnt[i] == 0) continue;
if(i == p) continue;
ll x = cnt[p], y = cnt[i];
for(int j = id; j >= 0; --j){
int kx = ((x >> j) & 1), ky = ((y >> j) & 1);
if(kx == 1 && ky == 1){
for(int k = j; k >= 0; --k){
ans = ans + (1 << k);
}
break;
}else if((kx == 1 && ky == 0) || (kx == 0 && ky == 1)){
ans = ans + (1 << j);
}else if(kx == 0 && ky == 0){
ans = ans + 0;
}
}
_ans = max(_ans, ans);
}
cout << _ans << '\n';
}
signed main(){
ios::sync_with_stdio(0), cin.tie(0);
int _; cin >> _;
while(_--) slv();
return 0;
}
/*
2
7
1 2 3 4 3 2 1
9
1 1 1 1 1 2 2 2 2
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3612kb
input:
1 7 1 2 3 4 3 2 1
output:
5
result:
wrong answer 1st numbers differ - expected: '3', found: '5'