Cod sursa(job #171081)

Utilizator blue_phoenixPosea Elena blue_phoenix Data 3 aprilie 2008 17:55:44
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 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,"%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;
}