记录编号 |
503718 |
评测结果 |
AAAAAAAATT |
题目名称 |
选拔(select) |
最终得分 |
80 |
用户昵称 |
落痕 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
2.037 s |
提交时间 |
2018-08-04 19:48:41 |
内存使用 |
23.21 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=1e6+20;
int n,h[N],a[N],l,p[N],cnt[N];
ll 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(ll 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)
{
ll x=1;
for(int j=1;j<=cnt[i];++j)
{
x=x*p[i];
if(x>=1e12 && j!=cnt[i]) mul(x),x=1;
if(j==cnt[i]) mul(x);
}
}
for(int i=v[0];i>=1;--i) cout<<v[i];
return 0;
}