中国(北方)大学生程序设计训练赛(第二周) (A B D G)
2017-03-12 16:57
246 查看
比赛链接
A题是KMP,先把A拼接到B的后面,然后利用next数组的意义(包括其具体含义,以及失配时的应用),得到ans
G
A题是KMP,先把A拼接到B的后面,然后利用next数组的意义(包括其具体含义,以及失配时的应用),得到ans
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 5 const int N=1e6+3; 6 int not_prime[N+5]; 7 vector<int> prime; 8 bool vis[N+5]; //图中存在label,使i是label的质因数 9 bool done[N+5]; //这一连通分量是否已被计数 10 int p[N+5]; 11 int T,kase; 12 13 int Find(int x) 14 { 15 return x==p[x]? x:p[x]=Find(p[x]); 16 } 17 void Union(int x,int y) 18 { 19 x=Find(x),y=Find(y); 20 p[x]=y; 21 } 22 23 void init() 24 { 25 for(int i=2;i<=N;i++) 26 { 27 if(!not_prime[i]) 28 { 29 //printf("%d=====\n",i); 30 prime.push_back(i); 31 for(LL j=(LL)i*i;j<=N;j+=i) 32 not_prime[j]=true; 33 } 34 } 35 } 36 int init1() 37 { 38 for(int i=1;i<=N;i++) 39 p[i]=i; 40 memset(vis,false,sizeof(vis)); 41 memset(done,false,sizeof(done)); 42 } 43 44 void getFactors(int x) 45 { 46 vector<int> a; 47 for(int i=0;prime[i]*prime[i]<=x;i++) 48 { 49 if(x%prime[i]==0) 50 { 51 a.push_back(prime[i]),vis[prime[i]]=true; 52 while(x%prime[i]==0) x/=prime[i]; 53 } 54 } 55 if(x>1) a.push_back(x),vis[x]=true; 56 for(int i=1;i<a.size();i++) 57 Union(a[0],a[i]); 58 } 59 60 int solve() 61 { 62 int ret=0; 63 for(int i=0;i<prime.size();i++) 64 { 65 if(vis[prime[i]]) 66 { 67 int t=Find(prime[i]); 68 if(!done[t]) 69 { 70 ret++; 71 //printf("===%d====",t); 72 done[t]=true; 73 } 74 } 75 } 76 return ret; 77 } 78 79 int main() 80 { 81 init(); 82 //freopen("test.txt","r",stdin); 83 scanf("%d",&T); 84 while(T--) 85 { 86 init1(); 87 int ans=0; 88 int n; 89 scanf("%d",&n); 90 for(int i=0;i<n;i++) 91 { 92 int t; 93 scanf("%d",&t); 94 if(t==1) 95 { 96 ans++; 97 continue; 98 } 99 getFactors(t); 100 } 101 ans+=solve(); 102 printf("Case %d: %d\n",++kase,ans); 103 } 104 }
G
相关文章推荐
- 中国(北方)大学生程序设计训练赛(第二周)(Problem A: Common Substrings-hash)
- 中国(北方)大学生程序设计训练赛(第二周)(Problem B: A Boring Game-乱搞)
- 中国(北方)大学生程序设计训练赛(第二周)(Problem C: A Water Problem-dp)
- 中国(北方)大学生程序设计训练赛(第二周)(Problem G: Connected Components-并查集)
- 中国(北方)大学生程序设计训练赛(第三周)(Interesting sequence-找规律)
- 中国(北方)大学生程序设计训练赛(第三周)(List likes playing card-期望)
- 中国(北方)大学生程序设计训练赛(第一周)-D (二分)
- 矩阵快速幂-中国(北方)大学生程序设计训练赛(第一周)Water Problem
- 中国(北方)大学生程序设计训练赛(第一周) (D E)
- 中国(北方)大学生程序设计训练赛(第一周)-F(线段树)
- 中国(北方)大学生程序设计训练赛(第一周)(Problem E: Water Problem-矩阵快速幂)
- 中国(北方)大学生程序设计训练赛(第一周)(Problem F: 等差区间-线段树+等差数列平方和公式)
- 中国(北方)大学生程序设计训练赛(第一周)(Problem D: 数学题-二分+双指针)
- 中国(北方)大学生程序设计训练赛(第一周)-A(生成树计数)
- 中国(北方)大学生程序设计训练赛(第一周)(Problem B: 埃蒙的时空航道-最小割转dp+贪心)
- 中国(北方)大学生程序设计训练赛(第一周)E. water problem
- 中国(北方)大学生程序设计训练赛(第一周)
- 等差区间(写的很脑残)——中国(北方)大学生程序设计训练赛(第一周)F
- 中国(北方)大学生程序设计训练赛(第一周)E. water problem
- xtu 1260 Determinant [2017年“嘉杰信息杯” 中国大学生程序设计竞赛全国邀请赛(湖南) A题]