Professional Documents
Culture Documents
Message
Message
h>
#include<stdio.h>
else if(x[i]=='\0')
{
return 3;
}
else if(y[i]=='\0')
{
return 2;
}
else if(x[i]>y[i])
{
return 2;
}
else if(x[i]<y[i])
{
return 3;
}
i++;
}
for(i=0;y[i]!='\0';i++)
{
*x=y[i];
x++;
*x='\0';
for(int i=0;i<s[i]!='\0';i++)
{
sum=(sum+ ((s[i]-'a'+1)*p) )%m;
p=(p*31)%m;//multiply number greater then the charecter set as well as the
nuber should be prime
}
return sum;
}
if(i==m-s+1)
{
x[c]=z[m+j+1];
j++;
c++;
}
else if(j==e-m)
{
x[c]=z[s+i];
i++;
c++;
}
else
{
x[c]=z[m+j+1];
j++;
c++;
srt(x,z,s, m, e, i, j, c);
if(s>=e)return;
int m=(s+e)/2;
mergesort(x,z,s,m);
mergesort(x,z,m+1,e);
srt(x,z,s,m,e,0,0,s);
for(int k=s;k<=e;k=k+1)
{
z[k]=x[k];
}
int hasht[31544][51],hashg[31544][51],hasha[31544][51],hashl[31544]
[51],hashy[10005][51];// 51 because per queary max result can be 50
int cntg[31544],cntt[31544],cnta[31544],cntl[31544],cnty[10005];
int main()
{
int n,i;
scanf("%d",&n);
book x[n+5];
book z[n+5];
for(i=0;i<n;i=i+1)
{
scanf("%d%s%s%s%s
%d",&x[i].id,x[i].title,x[i].genre,x[i].author,x[i].language,&x[i].year);
z[i]=x[i];
int s=0;
int e=n-1;
mergesort(x,z,s,e);//sort the array
for(i=0;i<n;i=i+1)
{
long long int ht=strhash( x[i].title );
long long int hg=strhash( x[i].genre );
long long int ha=strhash( x[i].author );
long long int hl=strhash( x[i].language );
hasht[ht][cntt[ht]++]=i;
hashg[hg][cntg[hg]++]=i;
hasha[ha][cnta[ha]++]=i;
hashl[hl][cntl[hl]++]=i;
hashy[x[i].year][cnty[x[i].year]++]=i;
int q;
scanf("%d",&q);
int qx;
int num;
char gen[30];
char title[30];
char author[30];
char language[30];
while(q--)
{
int c=0;
scanf("%d",&qx);
if(qx==1)
{
scanf("%s",gen);
else if(qx==2)
{
scanf("%d",&num);
long long int get=num;
for(i=0; i<cnty[get]; i=i+1)
{
printf("%d %s %s %s %s %d\n",x[ hashy[get][i] ].id,x[hashy[get]
[i]].title,x[hashy[get][i]].genre,x[hashy[get][i]].author,x[hashy[get]
[i]].language,x[hashy[get][i]].year);
else if(qx==3)
{
scanf("%s",title);
long long int get=strhash(title);
else if(qx==4)
{
scanf("%s",author);
long long int get=strhash(author);
}
}
else if(qx==5)
{
scanf("%s",language);
long long int get=strhash(language);
}
}
else if(qx==6)
{
scanf("%s%s",author,language);
long long int geta=strhash(author),getl=strhash(language);
for(i=0; i<cntl[getl]; i=i+1)
{
if(strhash(x[ hashl[getl][i] ].author )==geta)
{
printf("%d %s %s %s %s %d\n",x[ hashl[getl]
[i] ].id,x[hashl[getl][i]].title,x[hashl[getl][i]].genre,x[hashl[getl]
[i]].author,x[hashl[getl][i]].language,x[hashl[getl][i]].year);
}
}
else if(qx==7)
{
scanf("%s%s",author,title);
long long int geta=strhash(author),gett=strhash(title);
else if(qx==8)
{
scanf("%s%s",author,gen);
long long int geta=strhash(author),getg=strhash(gen);
else if(qx==9)
{
scanf("%s%s",gen,language);
long long int getg=strhash(gen),getl=strhash(language);