Submission #1870807
Source Code Expand
#include <cstdio> #include <cstring> #include <cassert> #include <map> #define MAXN 2010 #define MAXM 100010 using namespace std; struct edge{ int to,next; edge(int _to=0,int _next=0):to(_to),next(_next){} }e[MAXM<<1]; int n,numn; int a[MAXN]; bool flag[10010]; int prime[10010],nump; int g[MAXM],nume; int d[MAXN][MAXN]; bool tag[MAXM],visit[MAXM],used[MAXM]; map<int,int> Sp; int c[MAXM],numc; int maxv[MAXN],totmax,totmax2; void addEdge(int u,int v){ e[nume]=edge(v,g[u]); g[u]=nume++; } int gcd(int x,int y){ if(!y) return x; return gcd(y,x%y); } void init(){ for(int i=2;i<10010;i++){ if(!flag[i]) prime[++nump]=i; for(int j=1;j<=nump && i*prime[j]<10010;j++){ flag[i*prime[j]]=1; if(i%prime[j]==0) break; } } } void pre_gao(int x,int v){ int v0=v; for(int i=1;i<=nump && prime[i]*prime[i]<=v0;i++) if(v%prime[i]==0){ while(v%prime[i]==0) v/=prime[i]; if(!Sp.count(prime[i])) Sp[prime[i]]=++numn; addEdge(x,Sp[prime[i]]); addEdge(Sp[prime[i]],x); } if(v>1){ if(!Sp.count(v)) Sp[v]=++numn; addEdge(x,Sp[v]); addEdge(Sp[v],x); } } void dfs(int x){ visit[x]=1; c[x]=numc; if(tag[x] && a[x]<maxv[numc]) maxv[numc]=a[x]; for(int i=g[x];~i;i=e[i].next) if(!used[e[i].to] && !visit[e[i].to]){ dfs(e[i].to); } } int gao(int l){ for(int i=1;i<=numn;i++) visit[i]=0; totmax2=totmax=numc=0; for(int i=1;i<=n;i++) if(!used[i] && !visit[i]){ maxv[++numc]=1<<30; dfs(i); if(maxv[numc]>totmax){ totmax2=totmax; totmax=maxv[numc]; }else if(maxv[numc]>totmax2) totmax2=maxv[numc]; } int minv=1<<30; for(int i=1;i<=n;i++) if(!used[i] && tag[i] && a[i]<minv){ if(maxv[c[i]]==totmax && a[i]<totmax2) continue; if(maxv[c[i]]!=totmax && a[i]<totmax) continue; minv=a[i]; } for(int i=1;i<=n;i++) if(!used[i] && tag[i] && a[i]==minv){ used[i]=1; for(int j=1;j<=n;j++) if(tag[j] && a[j]>a[i]) tag[j]=0; for(int j=1;j<=n;j++) if(!used[j] && !tag[j] && d[j][i]!=1) tag[j]=1; return minv; } assert(0); } int main(){ #ifdef DEBUG freopen("E.in","r",stdin); #endif memset(g,-1,sizeof g); init(); scanf("%d",&n); numn=n; for(int i=1;i<=n;i++){ scanf("%d",a+i); pre_gao(i,a[i]); } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) d[i][j]=gcd(a[i],a[j]); for(int i=1;i<=n;i++) tag[i]=1; for(int i=1;i<=n;i++) printf("%d ",gao(i)); return 0; }
Submission Info
Submission Time | |
---|---|
Task | E - Rearranging |
User | ez_zjt |
Language | C++14 (GCC 5.4.1) |
Score | 1600 |
Code Size | 2497 Byte |
Status | AC |
Exec Time | 688 ms |
Memory | 18176 KB |
Compile Error
./Main.cpp: In function ‘int main()’: ./Main.cpp:110:16: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d",&n); ^ ./Main.cpp:113:18: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d",a+i); ^
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 1600 / 1600 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample1.txt, sample2.txt |
All | sample1.txt, sample2.txt, in1.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in2.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in3.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, in37.txt, in38.txt, in39.txt, in4.txt, in40.txt, in41.txt, in42.txt, in43.txt, in44.txt, in45.txt, in5.txt, in6.txt, in7.txt, in8.txt, in9.txt, sample1.txt, sample2.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
in1.txt | AC | 685 ms | 18176 KB |
in10.txt | AC | 688 ms | 18176 KB |
in11.txt | AC | 584 ms | 18048 KB |
in12.txt | AC | 588 ms | 18048 KB |
in13.txt | AC | 583 ms | 18048 KB |
in14.txt | AC | 585 ms | 18048 KB |
in15.txt | AC | 586 ms | 18176 KB |
in16.txt | AC | 679 ms | 18048 KB |
in17.txt | AC | 681 ms | 18048 KB |
in18.txt | AC | 678 ms | 18048 KB |
in19.txt | AC | 680 ms | 18048 KB |
in2.txt | AC | 686 ms | 18176 KB |
in20.txt | AC | 679 ms | 18048 KB |
in21.txt | AC | 406 ms | 18176 KB |
in22.txt | AC | 405 ms | 18176 KB |
in23.txt | AC | 408 ms | 18176 KB |
in24.txt | AC | 404 ms | 18176 KB |
in25.txt | AC | 405 ms | 18176 KB |
in26.txt | AC | 585 ms | 18048 KB |
in27.txt | AC | 588 ms | 18048 KB |
in28.txt | AC | 583 ms | 18048 KB |
in29.txt | AC | 587 ms | 18048 KB |
in3.txt | AC | 686 ms | 18176 KB |
in30.txt | AC | 586 ms | 18048 KB |
in31.txt | AC | 2 ms | 2304 KB |
in32.txt | AC | 2 ms | 2304 KB |
in33.txt | AC | 2 ms | 2304 KB |
in34.txt | AC | 451 ms | 18176 KB |
in35.txt | AC | 450 ms | 18176 KB |
in36.txt | AC | 629 ms | 18048 KB |
in37.txt | AC | 629 ms | 18048 KB |
in38.txt | AC | 629 ms | 18048 KB |
in39.txt | AC | 632 ms | 18048 KB |
in4.txt | AC | 688 ms | 18176 KB |
in40.txt | AC | 626 ms | 18048 KB |
in41.txt | AC | 628 ms | 18048 KB |
in42.txt | AC | 629 ms | 18048 KB |
in43.txt | AC | 628 ms | 18048 KB |
in44.txt | AC | 630 ms | 18048 KB |
in45.txt | AC | 631 ms | 18048 KB |
in5.txt | AC | 684 ms | 18176 KB |
in6.txt | AC | 686 ms | 18176 KB |
in7.txt | AC | 688 ms | 18176 KB |
in8.txt | AC | 688 ms | 18176 KB |
in9.txt | AC | 688 ms | 18176 KB |
sample1.txt | AC | 2 ms | 2432 KB |
sample2.txt | AC | 2 ms | 2432 KB |