Cod sursa(job #36841)

Utilizator MARCELMIHALCEA MARICEL MARCEL Data 24 martie 2007 10:44:29
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb

#include<stdio.h>

#define Lmax 2000002


 long hold[Lmax],hols[Lmax];


int main()
{

long i,cnt,nr,N,L,M,M1,R,nrd=0;
int dir;
long long X,Y,Z,V,timp,pozant,poz;


freopen("toys.in","r",stdin);
freopen("toys.out","w",stdout);

scanf("%ld%ld%ld",&N,&L,&M);

scanf("%lld%lld%lld%lld%lld",&pozant,&X,&Y,&Z,&V);


hols[pozant]=1;


for(i=2;i<=N;i++)
  {
  poz=( X * pozant + Y * (i-1) )  % ( L-1 ) +1 ;
  dir=( Z * pozant + V * (i-1) ) % 2;

  if( dir == 0 )
    hold[ poz ] ++;
   else
    hols[ poz ] ++;

  if( !dir ) nrd ++;

  pozant=poz;
  }


  if( M % N == 0 )
    {
    for( i=L;i;i--)
     if( hols[i] )
      break;
     timp= M/N*2*L+ i;
   }
  else
    {
    M1=(M/N)*N;
    R=M-M1;

    if( R <= nrd )
     {
     nr= nrd-R+1;
     cnt=0;
     for(i=1;i<=L&&cnt<nr;i++)
      if( hold[i]) cnt+= hold[i];

      timp=M1/N*2*L+L+(L-i+1);
      }
    else
     {
     R-=nrd;
     cnt=0;

     for(i=1;i<=L&&cnt<R;i++)
      if( hols[i] ) cnt += hols[i];

      timp=M1/N*2*L+L+L+i-1;
     }
    }


  printf("%lld\n",timp);

  return 0;
 }