QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#942309#10158. Forming GroupsElevenXWA 89ms3840kbC++202.8kb2025-03-19 03:41:352025-03-19 03:41:35

Judging History

This is the latest submission verdict.

  • [2025-03-19 03:41:35]
  • Judged
  • Verdict: WA
  • Time: 89ms
  • Memory: 3840kb
  • [2025-03-19 03:41:35]
  • Submitted

answer

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

vector<int> getDivisors(int n) {
    vector<int> divisors;
    for (int i = 2; i <= sqrt(n); ++i) {
        if (n % i == 0) {
            divisors.push_back(i);
            if (i != n / i) {
                divisors.push_back(n / i);
            }
        }
    }
    divisors.push_back(n);
    sort(divisors.begin(), divisors.end());
    divisors.erase(unique(divisors.begin(), divisors.end()), divisors.end());
    divisors.erase(remove(divisors.begin(), divisors.end(), 1), divisors.end());
    return divisors;
}

long long gcd(long long a, long long b) {
    return b == 0 ? a : gcd(b, a % b);
}

void solve() {
    int t;
    scanf("%d", &t);
    while (t--) {
        int n, a1;
        scanf("%d %d", &n, &a1);
        vector<int> a(n-1);
        for (int i = 0; i < n-1; ++i) {
            scanf("%d", &a[i]);
        }
        
        vector<int> divisors = getDivisors(n);
        long long min_p = LLONG_MAX, min_q = 1;
        
        for (int k : divisors) {
            if (k == n) {
                long long current_max = a1, current_min = a1;
                for (int x : a) {
                    current_max = max(current_max, (long long)x);
                    current_min = min(current_min, (long long)x);
                }
                long long g = gcd(current_max, current_min);
                long long p = current_max / g;
                long long q = current_min / g;
                if (p * min_q < q * min_p || (p * min_q == q * min_p && p < min_p)) {
                    min_p = p;
                    min_q = q;
                }
                continue;
            }
            
            for (int p = 0; p < n; ++p) {
                vector<long long> groups(k, 0);
                for (int i = 0; i < n; ++i) {
                    int group = i % k;
                    if (i == p) {
                        groups[group] += a1;
                    } else {
                        int orig_pos = (i < p) ? i : (i - 1);
                        groups[group] += a[orig_pos];
                    }
                }
                long long current_max = *max_element(groups.begin(), groups.end());
                long long current_min = *min_element(groups.begin(), groups.end());
                long long g = gcd(current_max, current_min);
                long long p_rat = current_max / g;
                long long q_rat = current_min / g;
                if (p_rat * min_q < q_rat * min_p || (p_rat * min_q == q_rat * min_p && p_rat < min_p)) {
                    min_p = p_rat;
                    min_q = q_rat;
                }
            }
        }
        
        printf("%lld %lld\n", min_p, min_q);
    }
}

int main() {
    solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3712kb

input:

2
4 1
2 1 2
3 10
4 3

output:

1 1
10 3

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 89ms
memory: 3840kb

input:

100000
2 1
1
2 1
2
2 1
500
2 1
999
2 1
1000
2 1
549
2 2
1
2 2
2
2 2
500
2 2
999
2 2
1000
2 2
593
2 500
1
2 500
2
2 500
500
2 500
999
2 500
1000
2 500
715
2 999
1
2 999
2
2 999
500
2 999
999
2 999
1000
2 999
843
2 1000
1
2 1000
2
2 1000
500
2 1000
999
2 1000
1000
2 1000
603
2 857
1
2 857
2
2 857
500
...

output:

1 1
2 1
500 1
999 1
1000 1
549 1
2 1
1 1
250 1
9223372036854775807 1
500 1
9223372036854775807 1
500 1
250 1
1 1
9223372036854775807 1
2 1
9223372036854775807 1
999 1
9223372036854775807 1
9223372036854775807 1
1 1
1000 999
333 281
1000 1
500 1
2 1
1000 999
1 1
1000 603
857 1
9223372036854775807 1
9...

result:

wrong answer 10th lines differ - expected: '999 2', found: '9223372036854775807 1'