/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 344.0 KiB
#2 Wrong Answer 1ms 532.0 KiB
#3 Wrong Answer 1ms 324.0 KiB

Code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T;
    cin >> T;
    while (T--) {
        int N;
        cin >> N;
        vector<int> A(N);
        for (int i = 0; i < N; i++) cin >> A[i];
        
        // Count frequencies
        map<int,int> freq;
        for (int x : A) freq[x]++;
        vector<int> vals;
        vals.reserve(freq.size());
        for (auto &p : freq) vals.push_back(p.first);
        int V = vals.size();
        
        // Precompute divisors of N
        vector<int> divisors;
        for (int d = 1; d * d <= N; ++d) {
            if (N % d == 0) {
                divisors.push_back(d);
                if (d != N/d) divisors.push_back(N/d);
            }
        }
        sort(divisors.begin(), divisors.end());
        
        int answer = 1; // at least 1 block always possible
        // Try smallest block size m to maximize blocks k = N/m
        for (int m : divisors) {
            if (m < 2) continue;
            int k = N / m;
            bool ok = false;
            
            // Gather possible D values
            unordered_set<int> Dset;
            // include D=0 specially
            Dset.insert(0);
            for (int i = 0; i < V; i++) {
                for (int j = i+1; j < V; j++) {
                    Dset.insert(abs(vals[j] - vals[i]));
                }
            }
            
            // Check each D
            for (int D : Dset) {
                int pairs = 0;
                if (D == 0) {
                    // count pairs from identical values
                    for (auto &p : freq) pairs += p.second / 2;
                } else {
                    for (int x : vals) {
                        auto it = freq.find(x + D);
                        if (it != freq.end()) {
                            pairs += min(freq[x], it->second);
                        }
                    }
                }
                if (pairs >= k) {
                    ok = true;
                    break;
                }
            }
            if (ok) {
                answer = k;
                break;
            }
        }
        
        cout << answer;
        if (T) cout << '\n';
    }
    return 0;
}

Information

Submit By
Type
Submission
Problem
P1162 G. Roy and Maximum Partition
Language
C++17 (G++ 13.2.0)
Submit At
2025-08-03 13:39:34
Judged At
2025-08-03 13:39:34
Judged By
Score
0
Total Time
1ms
Peak Memory
532.0 KiB