Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33731 | baka24 | 【S】T3 | C++ | 运行超时 | 0 | 1000 MS | 4836 KB | 1291 | 2024-10-20 16:19:38 |
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fr first #define sc second #define mk make_pair #define inx(u) int I=h[(u)],v=edge[I].v;I;I=edge[I].nx,v=edge[I].v int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=5010,base1=131,base2=2333,Mod1=1011451423,Mod2=998244853; struct Edge{int v,nx;}edge[MAXN<<1];int h[MAXN],CNT=1;void add_side(int u,int v){edge[++CNT]={v,h[u]};h[u]=CNT;edge[++CNT]={u,h[v]};h[v]=CNT;} int n,ans,a[MAXN],p[MAXN],mod[MAXN]; map<int,int>mp; void dfs(int now){ if(!now){ for(int i=1;i<=n;i++)p[i]=a[i]; for(int i=20;i;i--)if(mod[i])for(int j=1;j<=n;j++)p[j]%=i; int hs=0; for(int i=1;i<=n;i++)hs=(hs*base1%Mod1+p[i])%Mod1; // if(!mp[hs]){for(int i=1;i<=n;i++)cout<<p[i]<<" ";cout<<endl;} ans+=1-mp[hs]; mp[hs]=1; return; } mod[now]=1; dfs(now-1); mod[now]=0; dfs(now-1); } void slv(){ n=read(); for(int i=1;i<=n;i++)a[i]=read(); if(n<=0){ } else{ dfs(20); printf("%lld",ans); } } signed main(){ slv(); return 0; }