HDU
来源:互联网 发布:漫威电影观看顺序 知乎 编辑:程序博客网 时间:2024/06/03 20:13
思路:求出a和b中各个循环的长度。要使a中的某个循环满足,那么b中必须存在一个循环它的长度为a的因子,因为只有b中循环长度是a中的因子,才能被a整除,最后a置换回来才不变。
#include<cstdio>#include<set>#include<algorithm>#include<cstring>#include<iostream>#include<map>#include<queue>#include<vector>#include<stack>#include<string>#include<sstream>#include<set>#include<cmath>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 1e5 + 20;const double EPS = 1e-5;const int mod = 1e9 + 7;typedef unsigned long long ull;typedef long long LL;int dx[] = {0, 0, -1, 1, -1, -1, 1, 1};int dy[] = {1, -1, 0, 0, -1, 1, -1, 1};int n, m;vector<int> va, vb;int vis[maxn];int a[maxn], b[maxn];int main(){ int kase = 0; while(scanf("%d%d", &n, &m) == 2){ va.clear(); vb.clear(); for(int i = 0; i < n; ++i) scanf("%d", &a[i]); for(int i = 0; i < m; ++i) scanf("%d", &b[i]); memset(vis, 0, sizeof vis); for(int i = 0; i < n; ++i){ if(vis[i]) continue; int cnt = 1, v = a[i]; vis[i] = 1; while(v != i){ vis[v] = 1; cnt++; v = a[v]; } va.push_back(cnt); } memset(vis, 0, sizeof vis); for(int i = 0; i < m; ++i){ if(vis[i]) continue; int cnt = 1, v = b[i]; vis[i] = 1; while(v != i){ vis[v] = 1; cnt++; v = b[v]; } vb.push_back(cnt); } LL ans = 1; for(int i = 0; i < va.size(); ++i){ int sum = 0; for(int j = 0; j < vb.size(); ++j){ if(va[i] % vb[j] == 0){ sum += vb[j]; } } ans = ans * sum % mod; } printf("Case #%d: %lld\n", ++kase, ans); }}
阅读全文
1 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure
- Java-9-简单的OKHttp使用
- poj1661 Help Jimmy-dp动态规划 (M)
- Okhttp对http2的支持简单分析
- js里面在对象里面属性可以写对象类型吗
- HDU
- 从mysql获取数据方法的封装
- 实践spring data jpa:Executing an update/delete query........
- 概率DP 换教室
- Day07
- git命令学习
- No.3 平衡二叉树
- D
- Replace To Make Regular Bracket Sequence 【栈】