记录编号 503709 评测结果 AAAAAAAAWW
题目名称 2596.选拔(select) 最终得分 80
用户昵称 落痕 是否通过 未通过
代码语言 C++ 运行时间 1.278 s
提交时间 2018-08-04 19:41:31 内存使用 0.50 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#define ll long long
#define DB double 
#define eps 1e-6
using namespace std;
inline int read()
{
	int x=0,w=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') w=-1;ch=getchar();}
	while(isdigit(ch)) x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
	return x*w;
}
const int N=1e4+20;
int n,h[N],a[N],l,p[N],cnt[N]; 
int k1,v[N];
void work()
{
	v[0]=v[1]=1;
	for(int i=2;i<=n;++i)
	{
		if(!v[i]) p[++p[0]]=i;
		for(int j=1;j<=p[0] && i*p[j]<=n;++j)
		{
			v[i*p[j]]=1;
			if(i%p[j]==0) break;
		}
	}
	for(int i=1;i<=p[0];++i)
	{
		k1=n;
		while(k1/p[i]) cnt[i]+=k1/p[i],k1/=p[i];
	}k1=0;
}
void fen(int x)
{
	for(int i=1;i<=p[0];++i)
	{
		k1=x;
		while(k1/p[i]) cnt[i]-=k1/p[i],k1/=p[i];
	}
}
void mul(int x)
{
    for(int i=1;i<=v[0];++i) v[i]*=x;
    for(int i=1;i<=v[0];++i)
    {
    	v[i+1]+=v[i]/10;
    	v[i]%=10;
	}
	v[0]++;
	while(v[v[0]]>=10)
	{
		v[v[0]+1]+=v[v[0]]/10;
		v[v[0]]%=10;
		v[0]++;
	}
	while(v[v[0]]==0) v[0]--;
}
int main()
{
	freopen("select.in","r",stdin);
	freopen("select.out","w",stdout);
    n=read();
    for(int i=1;i<=n;++i) h[i]=read();
    sort(h+1,h+n+1);
    for(int i=1;i<=n;++i)
     if(h[i]==h[i-1]) a[l]++;
     else h[++l]=h[i],a[l]++;
    work();
    for(int i=1;i<=l;++i) fen(a[i]);
    for(int i=1;i<=n;++i) v[i]=0;
	v[1]=1;v[0]=1;
	for(int i=1;i<=p[0];++i)
	 for(int j=1;j<=cnt[i];++j)
	  mul(p[i]);
	for(int i=v[0];i>=1;--i) cout<<v[i];
    return 0;
}