Cod sursa(job #170968)

Utilizator blue_phoenixPosea Elena blue_phoenix Data 3 aprilie 2008 16:34:19
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <stdio.h>
#include <iostream.h>
#include <fstream.h>
//#include <conio.h>

int matr[1001][2],gen,w;
float vector[1001];

void date(){
int i;
ifstream fin("energii.in");
fin>>gen;
fin>>w;
for(i=0;i<gen;i++)
{
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();
}

int poz(int li, int ls){
  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(int li, int ls){
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 main(){
long int suma=0,cost=0;
int i,cap=0;
//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,"%d \n",cost);
}