QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#938694#10158. Forming GroupsElevenXWA 151ms3712kbC++202.2kb2025-03-17 02:59:312025-03-17 02:59:33

Judging History

This is the latest submission verdict.

  • [2025-03-17 02:59:33]
  • Judged
  • Verdict: WA
  • Time: 151ms
  • Memory: 3712kb
  • [2025-03-17 02:59:31]
  • Submitted

answer

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

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

vector<ll> getDivisors(ll n) {
    vector<ll> divs;
    for (ll i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            divs.push_back(i);
            if (i * i != n) divs.push_back(n/i);
        }
    }
    if (n > 1) divs.push_back(n);
    sort(divs.begin(), divs.end());
    return divs;
}

pair<ll, ll> solve() {
    ll n, a1;
    cin >> n >> a1;
    vector<ll> a(n-1);
    for (int i = 0; i < n-1; i++) {
        cin >> a[i];
    }
    
    ll best_num = LLONG_MAX, best_den = 1;
    vector<ll> divs = getDivisors(n);
    
    for (ll k : divs) {
        ll students_per_group = n/k;
        
        // Try each possible position for student 1
        for (int pos = 0; pos <= n-1; pos++) {
            vector<ll> group_sum(k, 0);
            vector<ll> sequence;
            
            // Create sequence with student 1 at position pos
            for (int i = 0; i < pos; i++) sequence.push_back(a[i]);
            sequence.push_back(a1);
            for (int i = pos; i < n-1; i++) sequence.push_back(a[i]);
            
            // Assign students to groups
            for (int i = 0; i < n; i++) {
                int group_id = (i % k);
                group_sum[group_id] += sequence[i];
            }
            
            // Find min and max group sums
            ll min_sum = *min_element(group_sum.begin(), group_sum.end());
            ll max_sum = *max_element(group_sum.begin(), group_sum.end());
            
            // Update best ratio if current is better
            if (min_sum > 0 && max_sum * best_den < best_num * min_sum) {
                best_num = max_sum;
                best_den = min_sum;
            }
        }
    }
    
    // Reduce fraction
    ll g = gcd(best_num, best_den);
    return {best_num/g, best_den/g};
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int t;
    cin >> t;
    while (t--) {
        auto [p, q] = solve();
        cout << p << " " << q << "\n";
    }
    return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
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: 151ms
memory: 3584kb

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
9223372036854775807 1
9223372036854775807 1
9223372036854775807 1
9223372036854775807 1
9223372036854775807 1
500 1
9223372036854775807 1
9223372036854775807 1
9223372036854775807 1
9223372036854775807 1
9223372036854775807 1
999 1
9223372036854775807 1
922337203...

result:

wrong answer 8th lines differ - expected: '1 1', found: '9223372036854775807 1'