Cod sursa(job #465815)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 25 iunie 2010 13:19:50
Problema Minim2 Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 1.49 kb
#include<fstream.h>
#define CAUZA1 (v[i].w=='0'&&v[i-1].w=='0'&&(v[i].q-v[i].q*a)<(v[i-1].q-v[i-1].q*a))
#define CAUZA2 (v[i].w=='1'&&v[i-1].w=='0'&&(v[i].q-v[i].q*b)<(v[i-1].q-v[i-1].q*a))
#define CAUZA3 (v[i].w=='1'&&v[i-1].w=='1'&&(v[i].q-v[i].q*b)<(v[i-1].q-v[i-1].q*b))
#define CAUZA4 (v[i].w=='0'&&v[i-1].w=='1'&&(v[i].q-v[i].q*a)<(v[i-1].q-v[i-1].q*b))
using namespace std;
struct spec{float q;char w;};
//char xx[1001];
int main()
{ifstream q("minim2.in");
ofstream w("minim2.out");
int ccn,pos,nc=0,i,n;
float cv[1001],S;
spec v[1001];  //00
float a,b,c;
q>>n;
for(i=1;i<=n;i++)
  {q>>v[i].q;
  v[i].w='0';
  cv[i]=v[i].q;
  S=S+v[i].q;}
q>>a>>b>>c;
if(S>=c)
{for(i=1;i<n;i++)
if(v[i].q>v[i+1].q)
  {v[0]=v[i];
  v[i]=v[i+1];
  v[i+1]=v[0];}
S=S-v[n].q;
nc++;
v[n].q=v[n].q*a;
S=S+v[n].q;
v[n].w='1';
for(i=1;i<n;i++)
if(v[i].q>v[i+1].q)
  {v[0]=v[i];
  v[i]=v[i+1];
  v[i+1]=v[0];}
//sort(v+1,v+n+1);}
while(S>=c)
   {i=n;
   pos=1;
   while((v[i].q*b<cv[i]/10000&&v[i].w==1)||(v[i].q*a<cv[i]/10000&&v[i].w==0)) 
    i--;
   while((CAUZA1||CAUZA2||CAUZA3||CAUZA4)&&i>1)
      i--;
   if(i==1)
    {i=n;
    while((v[i].q*b<cv[i]/10000&&v[i].w==1)||(v[i].q*a<cv[i]/10000&&v[i].w==0)) 
       i--;}
   nc++;
   S=S-v[i].q;
   if(v[i].w=='1')
   v[i].q=v[i].q*b;
   else
   {v[i].q=v[i].q*a;
   v[i].w=0;}
   S=S+v[i].q;
   for(i=1;i<n;i++)
     if(v[i].q>v[i+1].q)
      {v[0]=v[i];
      v[i]=v[i+1];
      v[i+1]=v[0];}}}
w<<nc;
return 0;}