Submission #7588

#TimeUsernameProblemLanguageResultExecution timeMemory
7588dohyun0324경비원 (GA8_guard)C++98
21 / 100
372 ms14388 KiB
#include<stdio.h> int cnt,n,a[2510],m,ch[30],w,b[2510],cnt2; long long int dap,d[100][17000]; int p[20]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43}; int gcd(int x,int y) { if(x%y==0) return y; return gcd(y,x%y); } void dfs(int x) { int i; if(x==n) { if(w>=2) { cnt++; } return; } dfs(x+1); for(i=1;i<=w;i++) { if(gcd(ch[i],a[x+1])!=1) break; } if(i!=w+1) return; ch[++w]=a[x+1]; dfs(x+1); ch[w--]=0; } int main() { int i,j,s; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a[i]); if(m<a[i]) m=a[i]; if(a[i]==1) cnt2++; } //subtask 1,2 if(n<=44) { dfs(1); ch[++w]=a[1]; dfs(1); printf("%d",cnt); } //subtask 3 else { for(i=1;i<=n;i++) { for(j=1;j<=14;j++) { if(a[i]%p[j]==0) b[i]+=(1<<(j-1)); } } d[1][b[1]]=1; for(i=2;i<=n;i++) { d[i][b[i]]++; for(j=0;j<=1<<14;j++) { d[i][j]+=d[i-1][j]; } for(j=0;j<=1<<14;j++) { if((j&b[i])!=0) continue; d[i][j|b[i]]+=d[i-1][j]; d[i][j|b[i]]%=1000000007; } } for(i=0;i<=1<<14;i++) { dap+=d[n][i]; dap%=1000000007; } printf("%lld",dap-n); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...