Cod sursa(job #171059)

Utilizator blue_phoenixPosea Elena blue_phoenix Data 3 aprilie 2008 17:32:55
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#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,"%d  %d\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;
}
}
*/
int main(){
long int suma=0,cost=0;
long int i;
//clrscr();
date();
sortare(0,gen-1);

for(i=0;i<gen;i++){
suma+=matr[i][0];
cost+=matr[i][1];
if(suma>=w)break;
}
if(suma<w)cost=-1;

FILE *fout;
fout = fopen("energii.out", "w+");
fprintf(fout,"%ld \n",cost);
return 0;
}