QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#610651#8332. Two in Onerxzfn639WA 0ms3612kbC++231.9kb2024-10-04 16:50:342024-10-04 16:50:35

Judging History

你现在查看的是最新测评结果

  • [2024-10-04 16:50:35]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3612kb
  • [2024-10-04 16:50:34]
  • 提交

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'