Cod sursa(job #253276)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 16:56:42
Problema Semne Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
 #include<stdio.h>  
 #include<stdlib.h>  
 #include<time.h>  
 #define N 50001  
 int np,nn,nt,s[N],i,p[N],n[N];  
 long long dif,a[N];  
 void readd(),solve(),prints();  
 int main()  
 {  
     readd();  
     solve();  
     prints();  
     return 0;  
 }  
 void readd()  
 {  
     freopen("semne.in","rt",stdin);  
     freopen("semne.out","wt",stdout);  
     scanf("%d%lld",&nt,&dif);dif=-dif;  
     for(i=1;i<=nt;i++){scanf("%lld",&a[i]);p[i]=i;dif+=a[i];}  
     np=nt;srand(time(0));  
 }  
 void solve()  
 {       int is;  
     while(dif)  
     {  
         while(dif>0)  
         { is=rand()%np+1;  
           n[++nn]=p[is];  
           p[is]=p[np--];  
           s[n[nn]]++;  
           dif-=a[n[nn]]<<1;  
         }  
         while(dif<0)  
         { is=rand()%nn+1;  
           p[++np]=n[is];  
           n[is]=n[nn--];  
           s[p[np]]--;  
           dif+=a[p[np]]<<1;  
         }  
     }  
 }  
 void prints()  
 {  
     for(i=1;i<=nt;i++)(s[i])?printf("-"):printf("+"); 
}