Pagini recente » Cod sursa (job #717132) | Cod sursa (job #2645269) | Autentificare | Cod sursa (job #446634) | Cod sursa (job #627223)
Cod sursa(job #627223)
Utilizator |
romario s8ko14 |
Data |
29 octombrie 2011 12:38:16 |
Problema |
Gutui |
Scor |
10 |
Compilator |
cpp |
Status |
done |
Runda |
teme_upb |
Marime |
1.56 kb |
#include<stdio.h>
int a[100000][2],n,U;
int ridicare(int n,int U)
{
int i;
for(i=0;i<n;i++)
if(a[i][0]>=0)
a[i][0]=a[i][0]+U;
}
int main()
{
FILE *f=fopen("gutui.in","rt");
FILE *g=fopen("gutui.out","wt");
int n,in_max,U,gr_max=0,i,j,max=0,var,cont=0,ok=0;
fscanf(f,"%i%i%i",&n,&in_max,&U);
for(i=0;i<n;i++)
for(j=0;j<2;j++)
fscanf(f,"%i",&a[i][j]);
while(2)
{
ok=0;
max=0;
for(i=0;i<n;i++)
if(a[i][0]>in_max-U && a[i][0]<=in_max)//ma asigur ca la urmatoarea crestere sa nu se duca prea sus && sa nu fie de pe acum prea sus gutuia
if(a[i][1]>max)//daca am mai multe gutui care la urmatoarea crestere cresc peste masura o aleg pe cea mai grea
{
max=a[i][1];
var=i;
}
if(max!=0)//daca am gasit vreo gutuie care creste la utmatoarea crestere peste masura
{
gr_max=gr_max+a[var][1];
a[var][0]=-1;a[var][1]=-1;
ridicare(n,U);
}
else
{
for(i=0;i<n;i++)
if(a[i][1]>max && a[i][0]<=in_max)
{
max=a[i][1];
var=i;
}
else
if(a[i][1]==max && a[i][0]>a[var][0] && a[i][0]<=in_max)
{
max=a[i][1];
var=i;
}
gr_max=gr_max+a[var][1];
a[var][0]=-1;a[var][1]=-1;
ridicare(n,U);
}
cont++;
//acum vreau sa vad daca mai pot culege vreo gutuie
if(cont==n)//daca le-am cules pe toate
break;
else
{
for(i=0;i<n;i++)
if(a[i][0]>-1 && a[i][0]<=in_max)//daca mai e vreuna la care poate ajunge Ion
{
ok=1;
break;
}
if(ok==0)
break;
}
}
fprintf(g,"%i",gr_max);
}