hdu6038-思维-2017多校(2)-Function
2017-07-28 12:25
411 查看
http://acm.hdu.edu.cn/showproblem.php?pid=6038
给定两个数组,设定一个函数f
满足 f[i]=b[f[a[i]]] ,求这种函数的个数。。
假设 a[] = {2, 0, 1}
则 f(0) = b[f(2)]
f(1) = b[f(0)]
f(2) = b[f(1)]
即 f(0) = b[b[b[f(0)]]],这其中的循环个数就是a的循环数组决定的
f(1) = b[b[b[f(1)]]]
f(2) = b[b[b[f(2)]]]
我们发现f的值就是一个循环,即一个函数f,再求一个值得时候,会求出好多其他的此f的其他值 f[0],f[1]什么的,而求得数目是由a数组决定的,确切的说,是由a数组中的循环数组决定的。
找出b中的循环个数,再把其中是a的约数的加起来。
给定两个数组,设定一个函数f
满足 f[i]=b[f[a[i]]] ,求这种函数的个数。。
假设 a[] = {2, 0, 1}
则 f(0) = b[f(2)]
f(1) = b[f(0)]
f(2) = b[f(1)]
即 f(0) = b[b[b[f(0)]]],这其中的循环个数就是a的循环数组决定的
f(1) = b[b[b[f(1)]]]
f(2) = b[b[b[f(2)]]]
我们发现f的值就是一个循环,即一个函数f,再求一个值得时候,会求出好多其他的此f的其他值 f[0],f[1]什么的,而求得数目是由a数组决定的,确切的说,是由a数组中的循环数组决定的。
找出b中的循环个数,再把其中是a的约数的加起来。
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <vector> using namespace std; typedef long long ll; const int maxn=100006; const int mod=1e9+7; int main() { int m,n; int tt=1; int a[maxn]; int b[maxn]; bool vis[maxn]; vector<int>q; vector<int>v; while(~scanf("%d%d",&m,&n)){ q.clear(); v.clear(); for(int i=0;i<m;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++){ scanf("%d",&b[i]); } memset(vis,false,sizeof(vis)); for(int i=0;i<m;i++){ int cur=i;int cnt=1; if(!vis[i]){ vis[i]=true; while(a[cur]!=i){ cur=a[cur]; vis[cur]=true; cnt++; } q.push_back(cnt); } } memset(vis,false,sizeof(vis)); for(int i=0;i<n;i++){ int cur=i;int cnt=1; if(!vis[i]){ vis[i]=true; while(b[cur]!=i){ cur=b[cur]; vis[cur]=true; cnt++; } v.push_back(cnt); } } long long ans=1; for(int i=0;i<q.size();i++) cout<<q[i]<<" "; cout<<endl; for(int i=0;i<v.size();i++) cout<<v[i]<<" "; cout<<endl; for(int i=0;i<q.size();i++) { ll tmp=0; for(int j=0;j<v.size();j++) { if(q[i]%v[j]==0) tmp=(tmp+v[j])%mod; } ans=ans*tmp%mod; } // cout<<ans<<endl; printf("Case #%d: %lld\n",tt++,ans); } return 0; }
相关文章推荐
- HDU6038-Function-数学+思维-2017多校Team01
- Hybrid Crystals (2017多校 第八场) (思维题 视力题)
- 2017 多校 Function(置换群
- 2017多校2 1006 Funny Function
- 2017 Multi-University Training Contest - Team 1 1006 Function(思维 循环节)
- 2017 多校 Function(置换群
- HDU 6038 (2017 多校训练赛1 1006) Function(图论)
- 2017 多校 Function(置换群
- HDU-2017 多校训练赛1-1006-Function
- 2017 多校 Function(置换群
- 2017 Multi-University Training Contest 2 && HDOJ 6050 Funny Function 【思维+快速幂】
- (2017多校训练第二场)HDU - 6052 To my boyfriend 思维题
- 2017 多校训练第一场 HDU 6038 Function
- 2017 多校训练 1006 Function
- hdu6047-贪心&思维-2017多校(2)-Maximum Sequence
- hdu 6050: Funny Function (2017 多校第二场 1006) 【找规律】
- 2017 多校 Function(置换群
- 2017 多校 Function(置换群
- HDU6038-Function 思维+组合问题
- 2017 多校 Function(置换群