Pagini recente » Istoria paginii runda/oji_2004_10 | Istoria paginii runda/barosaneala420 | Istoria paginii runda/100112 | Cod sursa (job #1219278) | Cod sursa (job #166462)
Cod sursa(job #166462)
#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; }