QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#938694 | #10158. Forming Groups | ElevenX | WA | 151ms | 3712kb | C++20 | 2.2kb | 2025-03-17 02:59:31 | 2025-03-17 02:59:33 |
Judging History
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'