Cod sursa(job #249771)

Utilizator katakunaCazacu Alexandru katakuna Data 29 ianuarie 2009 10:51:33
Problema Plus Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

struct plus {long long nr,val;} aux,v[3];
long long x,smax,S,a,b,i,sol,unu,minus,zero;


int cmp(plus a,plus b){
return a.val<b.val;
}


int main(){

FILE *f=fopen("plus.in","r");
fscanf(f,"%lld",&S);
  for(i=1;i<=3;i++)
  fscanf(f,"%lld %lld",&v[i].nr,&v[i].val);
  
fclose(f);

sort(v+1,v+4,cmp);

if( v[1].val == -1 && v[2].val == 0 && v[3].val == 1 ){
  if(v[3].nr >= S){
  sol = 1;
  sol+= min( (S-v[3].nr), v[1].nr);
  sol*= (v[2].val + 1);
  }
}

if(v[1].val == 1 && v[2].val == 1 && v[3].val == 1){

}

if(v[1].val == -1 && v[2].val == 1 && v[3].val == 1){
  if(v[2].nr + v[3].nr >= S){
    if(v[3].nr > v[2].nr){
    aux=v[3];
    v[3]=v[2];
    v[2]=aux;
    }
  smax = v[2].nr + v[3].nr;
  x = min(v[2].nr, v[3].nr) + 1;
    for(i=S; i<=smax && v[1].nr >= i-S; i++){
    sol+= min(i+1, x);
      if(i > v[2].nr)
      sol-=i - v[2].nr;
    }

  }
}

if(v[1].val == -1 && v[2].val == -1 && v[3].val == 1){

}


FILE *g=fopen("plus.out","w");
fprintf(g,"%lld",sol);
fclose(g);

return 0;
}