Cod sursa(job #163686)

Utilizator bazubBazu Bogdan bazub Data 22 martie 2008 14:57:25
Problema Progresii Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda Finala, Clasa a 9-a Marime 0.68 kb
#include<fstream.h>
#include<math.h>
long long n,m,k,l,d,cat;
long v[100001],i,j,p,ok;
long long min(long long a, long long b){
	if(b<a)
		return b;
	return a;
}
int main(){
	ifstream fin("progresii.in");
	ofstream fout("progresii.out");
	fin>>n>>m>>k>>l;
	for(i=1;i<=n;i++){
		fin>>p;
		d=l-p;
		v[i]=min(m-d%m,d);
		ok=0;
		while(cat<k && v[i]>1 && ok==0){
			ok=1;
			for(j=2;j<=v[i];j++)
				if(v[i]%j==0 && cat+d/(v[i]/j)<=k){
					v[i]/=j;
					ok=0;
					break;
				}
		}
		cat+=d/v[i];

	}
	if(cat>k){
		v[n]++;
		cat--;
	}
	if(cat>k)
		fout<<"-1"<<'\n';
else{
	for(i=1;i<=n;i++)
		fout<<v[i]<<'\n';
}
fin.close();
fout.close();
return 0;
}