转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud

Infoplane in Tina Town

Time Limit: 14000/7000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)
Total Submission(s): 518    Accepted Submission(s): 74

Problem Description
There is a big stone with smooth surface in Tina Town. When people go towards it, the stone surface will be lighted and show its usage. This stone was a legacy and also the center of Tina Town’s calculation and control system. also, it can display events in Tina Town and contents that pedestrians are interested in, and it can be used as public computer. It makes people’s life more convenient (especially for who forget to take a device).

Tina and Town were playing a game on this stone. First, a permutation of numbers from 1 to n were displayed on the stone. Town exchanged some numbers randomly and Town recorded this process by macros. Town asked Tine,”Do you know how many times it need to turn these numbers into the original permutation by executing this macro? Tina didn’t know the answer so she asked you to find out the answer for her.

Since the answer may be very large, you only need to output the answer modulo 3∗230+1=3221225473 (a prime).

 



Input
The first line is an integer T representing the number of test cases. T≤5

For each test case, the first line is an integer n representing the length of permutation. n≤3∗106

The second line contains n integers representing a permutation A1...An. It is guaranteed that numbers are different each other and all Ai satisfies ( 1≤Ai≤n ).

 



Output
For each test case, print a number ans representing the answer.
 



Sample Input
2
3
1 3 2
6
2 3 4 5 6 1
 



Sample Output
2
6

 

本来是一道水题,求出所有循环节的长度,然后求个LCM就好了,唯一的坑点就是输入的量实在是大。。。输入外挂跑了7s,改成队友给的fread的输入外挂变成了1.5s

 /**
* code generated by JHelper
* More info: https://github.com/AlexeyDmitriev/JHelper
* @author xyiyy @https://github.com/xyiyy
*/ #include <iostream>
#include <fstream> //#####################
//Author:fraud
//Blog: http://www.cnblogs.com/fraud/
//#####################
//#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <sstream>
#include <ios>
#include <iomanip>
#include <functional>
#include <algorithm>
#include <vector>
#include <string>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <climits>
#include <cctype> using namespace std;
#define rep2(X, L, R) for(int X=L;X<=R;X++)
typedef long long ll; //
// Created by xyiyy on 2015/8/7.
// #ifndef ICPC_SCANNER_HPP
#define ICPC_SCANNER_HPP #define MAX_LEN 20000000
#define MAX_SINGLE_DATA 100
#define getchar Getchar
#define putchar Putchar char buff[MAX_LEN + ];
int len_in = ;
int pos_in = ; inline void Read() {
if(len_in < MAX_SINGLE_DATA) {
int len = ;
while(len_in--)
buff[len++] = buff[pos_in++];
len_in = len + fread(buff + len, , MAX_LEN - len, stdin);
pos_in = ;
}
} inline int Getchar() {
Read();
if(len_in == ) return -;
int res = buff[pos_in];
if(++pos_in == MAX_LEN) pos_in = ;
len_in--;
return res;
} char buff_out[MAX_LEN + ];
int len_out = ;
inline void Flush() {
fwrite(buff_out, , len_out, stdout);
len_out = ;
} inline void Putchar(char c) {
buff_out[len_out++] = c;
if(len_out + MAX_SINGLE_DATA >= MAX_LEN)
Flush();
} inline int Scan() {
int res, ch=;
while(!(ch>=''&&ch<='')) ch=getchar();
res=ch-'';
while((ch=getchar())>=''&&ch<='')
res=res*+ch-'';
return res;
} template<class T>
inline void Out(T a) {
static int arr[];
int p = ;
do{
arr[p++] = a%;
a /= ;
}while(a);
while(p--) {
putchar(arr[p]+'');
}
} #endif //ICPC_SCANNER_HPP //
// Created by xyiyy on 2015/8/5.
// #ifndef ICPC_QUICK_POWER_HPP
#define ICPC_QUICK_POWER_HPP
typedef long long ll; ll quick_power(ll n, ll m, ll mod) {
ll ret = ;
while (m) {
if (m & ) ret = ret * n % mod;
n = n * n % mod;
m >>= ;
}
return ret;
} #endif //ICPC_QUICK_POWER_HPP int a[];
bool vis[];
map<int, int> ms;
int prime[];
bool ok[];
int gao = ;
void init(){
rep2(i,,)ok[i] = ;
rep2(i,,){
if(ok[i]){
prime[gao++] = i;
for(int j = i*i;j<;j+=i)ok[j] = ;
}
}
}
class hdu5392 {
public:
void solve() {
int t;
init();
t = Scan();//Scan(t);//in>>t;
ll mod = ;
while (t--) {
int n;
ms.clear();
n = Scan();//Scan(n);//in>>n;
rep2(i, , n) {
vis[i] = ;
a[i] = Scan();//Scan(a[i]);//in>>a[i];
}
rep2(i, , n) {
if (!vis[i]) {
int len = ;
int x = a[i];
vis[i] = ;
while (!vis[x]) {
vis[x] = ;
x = a[x];
len++;
}
for (int k = ; k<gao && prime[k] * prime[k] <= len; k++) {
int j = prime[k];
if (len % j == ) {
int num = ;
while (len % j == ) {
num++;
len /= j;
}
if (!ms.count(j))ms[j] = num;
else ms[j] = max(ms[j], num);
}
}
if (len != ) {
if (!ms.count(len))ms[len] = ;
}
}
}
ll ans = ;
for (auto x : ms) {
ans = ans * quick_power(x.first, x.second, mod) % mod;
}
Out(ans);
putchar('\n');//out<<ans<<endl;
} }
}; int main() {
//std::ios::sync_with_stdio(false);
//std::cin.tie(0);
hdu5392 solver;
//std::istream &in(std::cin);
//std::ostream &out(std::cout);
solver.solve();
Flush();
return ;
}

代码君

hdu5392 Infoplane in Tina Town(LCM)的更多相关文章

  1. [hdu5392 Infoplane in Tina Town]置换的最小循环长度,最小公倍数取模,输入挂

    题意:给一个置换,求最小循环长度对p取模的结果 思路:一个置换可以写成若干循环的乘积,最小循环长度为每个循环长度的最小公倍数.求最小公倍数对p取模的结果可以对每个数因式分解,将最小公倍数表示成质数幂的 ...

  2. HDU 5392 Infoplane in Tina Town

    Infoplane in Tina Town Time Limit: 14000/7000 MS (Java/Others)    Memory Limit: 524288/524288 K (Jav ...

  3. hdu 5392 Infoplane in Tina Town(数学)

    Problem Description There is a big stone with smooth surface in Tina Town. When people go towards it ...

  4. hdoj 5392 Infoplane in Tina Town

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5392 #include<stdio.h> #include<cstring> ...

  5. HDU-5391 Zball in Tina Town

    (n-1)!/n 就是如果n为素数,就等于n-1else为0. 求素数表: Zball in Tina Town Time Limit: 3000/1500 MS (Java/Others) Memo ...

  6. (hdu)5391 Zball in Tina Town

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5391 Problem Description Tina Town is a friendl ...

  7. hdu5391 Zball in Tina Town(威尔逊定理)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Zball in Tina Town Time Limit: 3000/1500 ...

  8. hdu 5391 Zball in Tina Town(打表找规律)

    问题描述 Tina Town 是一个善良友好的地方,这里的每一个人都互相关心. Tina有一个球,它的名字叫zball.zball很神奇,它会每天变大.在第一天的时候,它会变大11倍.在第二天的时候, ...

  9. C#版 - HDUoj 5391 - Zball in Tina Town(素数) - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. HDUoj 5 ...

随机推荐

  1. QQ原创表情添加

    有时候与QQ好友聊天时会收到一些自己比较喜欢的原创表情,如果我们想把这些QQ不支持直接保存的原创表情保存到电脑上该怎么做呢?我们以原创表情图片为例简单介绍一下. 首先,先建立一个存放表情图片的文件夹. ...

  2. PHP iconv()编码转换函数用法示例

    PHP iconv()字符编码转换函数的用法,iconv()函数,在php5中是内置的,语法格式:iconv("UTF- 8","GB2312//IGNORE" ...

  3. VS2012和2010 设置framework版本

    记录下找着麻烦http://zhidao.baidu.com/question/537279472.html VS2010和VS2012或者sv2008和VS2010,高版本VS编译都会出现,使用VS ...

  4. 装饰者模式 (decorator pattern)

    参考 : Head First 设计模式(中文版) 这篇只作为个人温习! 用意 : 动态地给一个对象添加|扩展一些行为.Decorator 强调用对象组合而非继承来实现扩展,这显得较为灵活. 角色: ...

  5. 什么是PWM、PFM及VFM

    做电源设计的大都知道PWM和PFM这两个概念.而VFM模式是在大功率輸出時為PWM模式在輕負載輸出時變為PFM模式的一種混合開關模式.目前开关电源的控制技术主要就是这三种:1.脉冲宽度调制器(PWM) ...

  6. BaseFragment

    public abstract class BaseFragment extends Fragment { public FragmentActivity mActivity; /** * 此方法可以 ...

  7. curl 提交请求

    http://forums.phpfreaks.com/topic/194255-curl-sending-array-as-post-value/ http://www.cnblogs.com/ch ...

  8. BZOJ3403: [Usaco2009 Open]Cow Line 直线上的牛

    3403: [Usaco2009 Open]Cow Line 直线上的牛 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 48  Solved: 41[S ...

  9. 获取SQL段的执行时间

    对SQL进行优化 经常会需要知道这条SQL语句执行的时间,这里介绍我的一种常用做法 DECLARE @d DATETIME SET @d=GETDATE() --do something --for ...

  10. 黑马程序员_Java集合框架

    集合类 1,为什么出现集合类? 面向对象语言对食物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2,数组和集合类同是容器,有何不同? 数组 ...