Pagini recente » Cod sursa (job #2986473) | Cod sursa (job #38341) | Cod sursa (job #2525881) | Cod sursa (job #1471171) | Cod sursa (job #2578214)
#include <bits/stdc++.h>
using namespace std;
ifstream f("banuti.in");
ofstream g("banuti.out");
//--------------------------------------------
///Globale
const int N_max = 50001;
int n,v[N_max],minim[5001];
vector<pair<int,int>>perechi;
priority_queue<pair<int,int>>q;
bitset<5001>ap;
//--------------------------------------------
///Functii
void citire();
void rezolvare();
//--------------------------------------------
int main()
{
citire();
rezolvare();
return 0;
}
//--------------------------------------------
void rezolvare()
{
sort(v + 1,v + n + 1);
int mod = v[1];
for(int i = 1; i <= n; ++i)
if(ap[v[i] % mod] == 0)
{
ap[v[i] % mod] = 1;
perechi.push_back({v[i],v[i] % mod});
}
for(int i = 0; i <= mod; ++i)
minim[i] = -1;
q.push({0,0});
while(!q.empty())
{
int x = -q.top().first;
int y = q.top().second;
q.pop();
if(minim[y] == -1)
{
minim[y] = x;
for(auto it : perechi)
if(minim[(y + it.second) % mod] == -1)
q.push({-(x + it.first),(y + it.second) % mod});
}
}
int rasp = 0;
for(int i = 0; i < mod; ++i)
if(minim[i] == -1)
{
g << -1;
return;
}
else
rasp = max(rasp,minim[i]);
g << rasp - mod;
}
//--------------------------------------------
void citire()
{
f >> n;
for(int i = 1; i <= n; ++i)
f >> v[i];
}