Cod sursa(job #1121108)

Utilizator vlcmodanModan Valentin vlcmodan Data 25 februarie 2014 11:35:42
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.88 kb
#include <iostream>
#include<stdio.h>
using namespace std;
#define MAXI 10000
int a1,b1,c1,n;
int a11;
int numar;
int s;
int a10;
int a[MAXI],b[MAXI],c[MAXI];
int e[MAXI],f[MAXI];
void putere(int x)
{
    while(x!=0)
    {
        a[++a[0]]=x%10;
        x/=10;
    }
    b[0]=1;
    b[1]=1;
    for(int i=1;i<=11;i++)
    {
        s=0;
		if(i==11)
		{
			
			for(int w=b[0];w>=1;w--)
				{
				a11=a11*10+b[w];
				a11%=c1;
				}
			for(int w=0;w<=b[0];w++)
				f[w]=b[w];
				
		}
        for(int j=1;j<=a[0];j++)
        {
            for(int u=1;u<=b[0]+2;u++)
            {
                c[j+u-1]+=a[j]*b[u]+s;
                s=c[u+j-1]/10;
                c[u+j-1]%=10;
            }
        }
        s=a[0]+b[0]+2;
        while(c[s]==0&&s>0)
        s--;
        c[0]=s;
        for(int k=0;k<=s;k++)
        {
            b[k]=c[k];
            c[k]=0;
        }
    }
	
	int i=1;
	s=0;
	b[i]--;
	while(b[i]<0)
	{
		b[i]+=10+s;
		s=-1;
		i++;
	}
	s=0;
	for(i=b[0];i>=1;i--)
	{
		s=b[i]+s*10;
		b[i]=s/(a1-1);
		s=s%(a1-1);
		
	}
		
    for(int i=b[0];i>=1;i--)
        {
            numar=numar*10+b[i];
            numar%=c1;
            }
	numar=(numar*b1)%c1;
}
int main()
{
    freopen("radixsort.in","r",stdin);
    freopen("radixsort.out","w",stdout);
    scanf("%d %d %d %d",&n,&a1,&b1,&c1);
    putere(a1);
	e[++e[0]]=numar;
	s=0;
	int i=1;
	f[i]--;
	while(f[i]<0)
	{
		f[i]+=10+s;
		s=-1;
		i++;
	}
		s=0;
	for(i=f[0];i>=1;i--)
	{
		s=f[i]+s*10;
		f[i]=s/(a1-1);
		s=s%(a1-1);
		
	}
	numar=0;
	 for(int i=f[0];i>=1;i--)
        {
            numar=numar*10+f[i];
            numar%=c1;
            }
	 numar=numar*b1;
	 numar%=c1;
	for(int i=21;i<=n;i+=10)
	{
		e[++e[0]]=a11*e[e[0]-1]+numar;
		e[e[0]]%=c1;
	}
    for(int i=b[0];i>=1;i--)
    printf("%d",b[i]);
    return 0;
 
}