Cod sursa(job #2578214)

Utilizator alex2209alexPavel Alexandru alex2209alex Data 10 martie 2020 19:09:54
Problema Rsir Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#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];
}