Cod sursa(job #278449)

Utilizator Andrei_ScorpioAndreiana Andrei Daniel Andrei_Scorpio Data 12 martie 2009 12:33:24
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<stdio.h>
#define max(a,b) ((a>b) ? a : b)
long n,m,l,d,optim;
struct max
{ long val,crt;
  long dist,lun;
}max1,max2,min1,min2;

int main()
{
 long i;
 freopen("orase.in","r",stdin);
 freopen("orase.out","w",stdout);
 scanf("%d%d",&m,&n);
 for(i=1;i<=n;i++)
 {	scanf("%d%d",&d,&l);
	if(l+d>max1.val)
	{	max2=max1;
		max1.val=l+d;
		max1.dist=d;
		max1.lun=l;
		max1.crt=i;
	}
	else
		if(l+d>max2.val)
		{	max2.val=l+d;
			max2.dist=d;
			max2.lun=l;
			max2.crt=i;
		}
	if(l-d>min1.val)
	{	min2=min1;
		min1.val=l-d;
		min1.dist=d;
		min1.lun=l;
		min1.crt=i;
	}
	else
		if(l-d>min2.val)
		{	min2.val=l-d;
			min2.dist=d;
			min2.lun=l;
			min2.crt=i;
		}
 }
 long op1,op2;
 if(max1.crt!=min1.crt)
	if(max1.dist>min1.dist)
		optim=max1.lun+min1.lun+max1.dist-min1.dist;
	else
		optim=max1.lun+min1.lun-max1.dist+min1.dist;
 else
	{
	if(max1.dist>min2.dist)
		op1=max1.lun+min2.lun+max1.dist-min2.dist;
	else
		op1=max1.lun+min2.lun-max1.dist+min2.dist;
	if(max2.dist>min1.dist)
		op2=max2.lun+min1.lun+max2.dist-min1.dist;
	else
		op2=max2.lun+min1.lun-max2.dist+min1.dist;
	optim=max(op1,op2);
	}
 printf("%d\n",optim);
 return 0;
}