Pagini recente » Cod sursa (job #2189128) | Cod sursa (job #15044) | Cod sursa (job #1473780) | Cod sursa (job #1502255) | Cod sursa (job #2016214)
#include <cstdio>
#include <set>
int main() {
freopen("sequences.in", "r", stdin);
freopen("sequences.out", "w", stdout);
int n;
scanf("%d", &n);
long long x[n];
for(int i = 0; i < n; i++)
scanf("%lld", &x[i]);
long long answer;
if (n == 2) {
answer = x[0] * x[1] - x[0] - x[1];
} else {
/*
std::set<long long> pq;
pq.insert(0);
long long previous = -100;
long long conseq = 0;
while(conseq < x[0]) {
long long number = *pq.begin();
pq.erase(pq.begin());
//printf("%lld\n", number);
//for(int val : pq)
// printf("%d ", val);
//printf("\n");
for(int i = 0; i < n; i++)
pq.insert(number + x[i]);
if (previous + 1 == number)
conseq++;
else
conseq = 1;
previous = number;
}
answer = previous - x[0];//*/
long long reminders[x[0]];
for(int i = 0; i < x[0]; i++)
reminders[i] = -1;
std::set<long long> pq;
reminders[0] = 0;
pq.insert(0);
long long counter = x[0] - 1;
while (counter > 0) {
long long number = *pq.begin();
pq.erase(pq.begin());
//printf("%lld\n", number);
//for(int val : pq)
// printf("%d ", val);
//printf("\n");
for (int i = 1; i < n; i++)
if (reminders[(number + x[i]) % x[0]] == -1) {
reminders[(number + x[i]) % x[0]] = number + x[i];
pq.insert(number + x[i]);
counter--;
}
}
answer = 0;
for (int i = 1; i < x[0]; i++) {
printf("%lld ", reminders[i]);
answer = std::max(answer, reminders[i] - x[0]);
}
}
printf("\n%lld\n", answer);
return 0;
}