⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2154_tle.cpp

📁 各种算法
💻 CPP
字号:
#include"iostream"
using namespace std;
#include"map"
#include"math.h"
#include <algorithm>
#define N 100
#define M 2*N
int a[N];__int64 c[N][N] = {0};
int rep[M];//各置换循环节数
void rotate(int n)//旋转的循环节总数
{	int b[N];int i,j;
	for( i = 0;i < n; i++)	a[i] = i;
	for(	i = 1;i <= n-1; i++)
	{	int t = a[0];
		for( j = 0;j < n-1; j++) a[j] = a[j+1];
		a[n-1] = t;		//设置置换类
		memset(b,0,sizeof b);
		int knob = 0;
		for( j = 0;j < n; j++){
			if(b[j]) continue;
			for(int k = a[j]; k != j; k = a[k]) {b[k] = 1;}
			knob++;
		}
		rep[i] = knob;
	}
}
__int64 polya(int n,int m)
{
	if(n == 0) return 0;
	__int64 p = 0;
	for(int i = 0;i < n; i++) {
		p += (__int64)pow((double)m,rep[i]);
	}
	return p/n;
}
__int64 com(int m,int j)
{
	if(c[m][j]) return c[m][j];
	if(j == 0) return 1;
	else return c[m][j] = com(m-1,j-1)*m/j;
}
int main()
{	int n,m,j,k;__int64 sum = 0;
	scanf("%d",&k);
	while(k--){
		scanf("%d%d",&m,&n);
		rep[0] = m;
		rotate(m);
		printf("%I64d\n",polya(m,m)%n);
	}
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -