转载请注明出处: 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. PHP学习系列(1)——字符串处理函数(4)

    16.hebrevc() 函数把希伯来文本从右至左的流转换为左至右的流.它也会把新行 (\n) 转换为 <br />.只有 224 至 251 之间的 ASCII 字符,以及标点符号受到影 ...

  2. Java在ACM中的使用

    1.基本框架   import java.oi.*;   import java.util.*   public class Main   {   public static void main(St ...

  3. Python自动化运维之6、函数装饰器

    装饰器: 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大.装饰器一般接受一个函数对象作为参数, ...

  4. 《EM-PLANT仿真技术教程》读书笔记(持续更新中)

    1.在系统分析过程中,必须考虑系统所处的环境,因此划分系统与环境的边界是系统分析的首要任务 2.模型可以分为物理模型和数学模型.数学模型可以分为解析模型.逻辑模型.网络模型以及仿真模型.模型可以分为离 ...

  5. tomcat+mysql数据库连接池的操作

    使用tomcat中的context.xml设置连接池 打开文件:Apache Software Foundation\Tomcat 6.0\conf\context.xml <Resource ...

  6. 转:Red Hat JBoss团队发布WildFly 8,全面支持Java EE 7并包含全新的嵌入式Web服务器

    原文来自于:http://www.infoq.com/cn/news/2014/02/wildfly8-launch Red Hat的JBoss部门今天宣布WildFly 8正式发布.其前身是JBos ...

  7. rsyslog 读取单个文件测试

    rsyslog 测试(rsyslog 必须yum 安装uat-web02:/root# rpm -qa | grep rsyslog rsyslog-8.21.0-1.el6.x86_64) //读取 ...

  8. bzoj1827 [Sdoi2010]星际竞速

    Description 10 年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一, 夺得这个项目的冠军无疑是很多人的梦想,来自杰森座 α星的悠悠也是其中之一. 赛车大赛的赛场由 N 颗行星和 ...

  9. v4l2采集视频和图片源码

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h&g ...

  10. uva 10714 Ants(贪心)

    题目连接:10714 - Ants 题目大意:一根棍子上有n只蚂蚁, 这些蚂蚁开始可以任意朝着一个方向移动一直走,向左或是向右,并且移动速度是相同的,但是一旦蚂蚁碰到迎面走来的另一只蚂蚁,那么这两只蚂 ...