QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#938693 | #10158. Forming Groups | ElevenX | WA | 89ms | 3584kb | C++20 | 2.2kb | 2025-03-17 02:58:30 | 2025-03-17 02:58:30 |
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); // Include n itself if > 1
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) {
// Try each possible position for student 1
for (int pos = 0; pos <= n-1; pos++) {
vector<ll> group_sum(k, 0);
vector<ll> values(n);
// Create the sequence with student 1 at pos
int idx = 0;
for (int i = 0; i < n; i++) {
if (i == pos) {
values[i] = a1;
} else {
values[i] = a[idx++];
}
}
// Assign students to groups
for (int i = 0; i < n; i++) {
group_sum[i % k] += values[i];
}
// Calculate ratio
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 (min_sum > 0) {
// Use multiplication to avoid floating point
if (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: 0ms
memory: 3584kb
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: 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'