Pagini recente » Cod sursa (job #2626825) | Cod sursa (job #1908278) | Cod sursa (job #1314426) | Cod sursa (job #2141073) | Cod sursa (job #2910850)
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <unordered_map>
#define NMAX 100003
using namespace std;
ifstream fin("grupuri.in");
ofstream fout("grupuri.out");
int v[NMAX], n, k;
long long int sum = 0;
int main() {
fin >> k >> n;
for (int i = 1; i <= n; i++)
{
int x;
fin >> x;
if (i <= n - k)
{
sum += x;
}
else {
v[i - n + k] = x;
}
}
for (int i = 2; i <= k; i++)
{
int trans = i - 1;
int difer = v[i] - v[i - 1];
//vreau sa aduc secventa 1, 2 .. i la v[i]
if (sum >= trans * difer)
{
sum -= trans * difer;
}
else {
//nu pot sa aduc toate elementele la v[i]
long long int posib = sum / difer;
long long int ramas = sum - posib * difer;
fout << v[i - 1] + ramas;
return 0;
}
}
//mi-a mai ramas sum de distribuit la toti egal
long long int posib = sum / k;//sa le dau tuturor egal
long long int ramas = sum - posib * k;
if (ramas == 0)
{
fout << v[k] + posib;
return 0;
}
fout << v[k] + posib - 1;//sunt pe un multiplu de k+ramas
return 0;
}