QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#942309 | #10158. Forming Groups | ElevenX | WA | 89ms | 3840kb | C++20 | 2.8kb | 2025-03-19 03:41:35 | 2025-03-19 03:41:35 |
Judging History
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'