Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined), problem: (C) Felicity is Coming! Solution in C/C++

#include<stdio.h>
#include<stdlib.h>
#define m 1000000007u
typedef long long unsigned llu;
typedef unsigned u;
int C(const void*x,const void*y){return*(u*)x-*(u*)y;}
int D(const void*x,const void*y)
{
	if(*(llu*)x>*(llu*)y)return 1;
	if(*(llu*)x<*(llu*)y)return-1;
	return 0;
}
llu H[1111111],P[1111111];
u F[1111111],Q[1111111];
int main()
{
	u t,q,n,i,j,r=1;
	for(F[i=0]=1;++i<1111111๐Ÿ˜‰F[i]=i*(llu)F[i-1]%m;
	for(P[i=0]=1;++i<1111111๐Ÿ˜‰P[i]=m*P[i-1]+1;
	for(scanf("%u%u",&t,&n);t--;)
	{
		scanf("%u",&q);
		for(i=-1;++i<q๐Ÿ˜‰scanf("%u",Q+i);
		qsort(Q,q,sizeof(u),C);Q[q]=-1u;
		for(j=i=0;++i<=q๐Ÿ˜‰if(Q[i]!=Q[j])
		{
			H[Q[j]-1]+=(i-j)*P[t];
			j=i;
		}
	}
	qsort(H,n,sizeof(llu),D);H[n]=-1llu;
	for(j=i=0;++i<=n๐Ÿ˜‰if(H[i]!=H[j])
	{
		
		r=r*(llu)F[i-j]%m;
		j=i;
	}
	printf("%u\n",r);
	return 0;
}
(Visited 36 times, 1 visits today)

About the Author:

Leave A Comment