Pagini recente » Monitorul de evaluare | Profil kyrk | Rating Dragu Mihai (mikleaish) | Monitorul de evaluare | Cod sursa (job #171083)
Cod sursa(job #171083)
#include <stdio.h>
//#include <iostream.h>
//#include <fstream.h>
//#include <conio.h>
long int matr[1001][2],gen,w;
float vector[1001];
void date(){
long int i;
//ifstream fin("energii.in");
//fin>>gen;
//fin>>w;
FILE *fin;
fin = fopen("energii.in", "rt");
fscanf(fin,"%ld %ld\n",&gen,&w);
for(i=0;i<gen;i++)
{
fscanf(fin,"%ld %ld\n",&matr[i][0],&matr[i][1]);
//fin>>matr[i][0];
//fin>>matr[i][1];
//cout<<matr[i][1]<<" ";
vector[i]=(float) matr[i][0]/matr[i][1];
}
//cout<<endl;
//fin.close();
}
long int poz(long int li,long int ls){
long int c,i1=0,j1=-1;
while(li<ls){
if(vector[li]<vector[ls]){
c=vector[li];
vector[li]=vector[ls];
vector[ls]=c;
c=matr[li][0];
matr[li][0]=matr[ls][0];
matr[ls][0]=c;
c=matr[li][1];
matr[li][1]=matr[ls][1];
matr[ls][1]=c;
c=i1;
i1=-j1;
j1=-c;
}
li+=i1;
ls+=j1;
}
return li;
}
void sortare(long int li,long int ls){
long int k;
if(li<ls){
k=poz(li,ls);
sortare(li,k-1);
sortare(k+1,ls);
}
}
/*void afisare(){
int i;
for(i=0;i<gen;i++){
cout<<matr[i][0]<<" "<<matr[i][1]<<endl;
}
}
*/
void bubble(long int li, long int ls){
long int c,ok=0,i;
while(!ok){
for(i=li;i<ls;i++){
ok=0;
if(matr[i][0]<matr[i+1][0]){
c=matr[i][0];
matr[i][0]=matr[i+1][0];
matr[i+1][0]=c;
c=matr[i][1];
matr[i][1]=matr[i+1][1];
matr[i+1][1]=c;
ok=1;
}
}
}
}
int main(){
long int suma=0,cost=0;
long int i,cap=0;
//clrscr();
date();
sortare(0,gen-1);
//cu un bubble mai trebuie aranjate alea egale ca raport
//aranj descrescator dupa energia pe care o dau
vector[gen]=-10;
for(i=0;i<gen;i++){
if(vector[i]!=vector[i+1]){
bubble(cap,i);
cap=i+1;
}
}
for(i=0;i<gen;i++){
suma+=matr[i][0];
cost+=matr[i][1];
//cout<<suma<<" ";
if(suma>=w)break;
}
if(suma<w)cost=-1;
FILE *fout;
fout = fopen("energii.out", "w+");
fprintf(fout,"%ld \n",cost);
//cout<<endl<<"AFISARE:"<<endl;
//afisare();
//getch();
return 0;
}