Cod sursa(job #166468)

Utilizator pandaemonAndrei Popescu pandaemon Data 28 martie 2008 00:50:43
Problema Semne Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#define NMAX 50003

long long n,s,i,var,plus,minus,limA,limB,j;

struct multime {long long poz,val;} a[NMAX],b[NMAX],x,nothing;

				// A - MULTIMEA +
			       //  B - MULTIMEA -

long long mutare(multime to[],multime from[],long long &lim_to,long long &lim_from)
{
  i=rand()%lim_from+1;

  to[ ++lim_to ] = from[i];

  for(;i<lim_from;i++) from[i]=from[i+1];

  from[ lim_from -- ]= nothing;

  return to[lim_to].val;
}




int main()
{
  freopen("semne.in","r",stdin);
  freopen("semne.out","w",stdout);

  scanf("%lld %lld",&n,&s);

  for(i=1;i<=n;i++)
  {scanf("%lld",&a[i].val); plus+=a[i].val; a[i].poz=i;}

  limA=n;

  while(plus-minus!=s)
  {

    if(plus-minus<s) {var=mutare(a,b,limA,limB); plus+=var; minus-=var;}
    if(plus-minus>s) {var=mutare(b,a,limB,limA); plus-=var; minus+=var;}

  }

  //for(j=1;j<=limB;j++) cout<<b[j].poz<<" ";

  /*for(i=1;i<=n;i++)

  { for(j=1;j<=limA;j++)
    if( a[j].poz==i ) {printf("+"); break;}

    for(j=1;j<=limB;j++)
    if( b[j].poz==i ) {printf("-"); break;}
  } */


  printf("\n"); return 0; }