首页 > 编程语言 >Schreier–Sims 算法

Schreier–Sims 算法

时间:2024-12-17 21:42:48浏览次数:4  
标签:Sims int back perm ins exins 算法 maxn Schreier

好看的实现。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=105;
int n,q;
struct perm{int p[maxn];};
perm operator *(perm a,perm b){
	perm c;
	for(int i=1;i<=n;i++)c.p[i]=a.p[b.p[i]];
	return c;
}
perm inv(perm a){
	perm c;
	for(int i=1;i<=n;i++)c.p[a.p[i]]=i;
	return c;
}
vector<perm> R[maxn],S[maxn];
int nrm[maxn][maxn];
perm e;
bool pd(perm a,int N=n){
	int m=N;
	while(m>1){
		if(nrm[m][a.p[m]]==-1)return 0;
		a=inv(R[m][nrm[m][a.p[m]]])*a;
		--m;
	}
	return 1;
}
void exins(perm a,int N);
void ins(perm a,int N);
void exins(perm a,int N){
	int &g=nrm[N][a.p[N]];
	if(g==-1){
		g=R[N].size();
		R[N].push_back(a);
		vector<perm> d;
		for(auto s:S[N])d.push_back(s*a);
		for(auto p:d)exins(p,N);
	}else{
		a=inv(R[N][g])*a;
		ins(a,N-1);
	}
}
void ins(perm a,int N){
	if(pd(a,N))return ;
	S[N].push_back(a);
	vector<perm> d;
	for(auto t:R[N])d.push_back(a*t);
	for(auto p:d)exins(p,N);
}
int calc(){
	int res=1;
	for(int i=1;i<=n;i++)res=res*(int)R[i].size();
	return res;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	memset(nrm,-1,sizeof(nrm));
	cin>>n>>q;
	for(int i=1;i<=n;i++)e.p[i]=i;
	for(int i=1;i<=n;i++)nrm[i][i]=0,R[i].push_back(e);
	for(int i=1;i<=q;i++){
		perm a;for(int j=1;j<=n;j++)cin>>a.p[j];
		ins(a,n);
	}	
	cout<<calc()<<endl;
	return 0;
}

标签:Sims,int,back,perm,ins,exins,算法,maxn,Schreier
From: https://www.cnblogs.com/british-union/p/18613469/ssims

相关文章

  • 数据结构与算法分析-Chapter1
    Chapter1-绪论1.1数据结构的基本概念1.数据(data)        主要包括数值型数据和非数值型数据。2.数据元素(dataelement)        描述数据的基本单位。可以由多个数据项(dataitem)组成。        数据项是具有独立含义的最小标识单位。例如描述......
  • 数据结构与算法分析-Chapter3
    Chapter3-栈和队列        1.栈和队列是两种常用的线性存储表。        2.都限定关于插入和删除元素的操作在表的端点进行。栈只能在栈顶进行操作,队列仅能在队首和队尾进行操作。3.1栈3.1.1栈的基本概念        1.只允许在一段插入和删除元......
  • 数据结构之栈和队列算法题
    一:有效括号数学了栈之后这一题就比较简单了。思路:1、左括号进栈2、右括号出栈匹配。完整代码:因为使用C语言写的,所以里面包含了栈的实现#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<stdbool.h>typedefintSTDataType;typedefstructStack{ ......
  • SM4加密算法介绍
    1.SM4算法介绍引用百度百科的介绍:SM4.0(原名SMS4.0)是中华人民共和国政府]采用的一种[分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥......
  • 智慧园区算法视频分析服务器网络摄像机供电正常,用IP搜索工具或中心管理软件搜索不到摄
    在使用网络摄像机进行监控时,确保摄像机能够被正确识别和连接至网络至关重要。然而,有时即使摄像机供电正常,使用IP搜索工具或中心管理软件仍然无法找到其IP地址。这种情况可能由多种因素引起,包括网络连接问题、IP设置不当或设备故障等。为了帮助用户快速定位和解决这些问题,以下是一......
  • 算法刷题_数组篇
    算法刷题Day3_数组篇_螺旋矩阵文章目录算法刷题Day3_*数组篇*_螺旋矩阵前言一、经典例题二、参考代码相关变体总结前言关键点:遍历时边界上的点,使用一个规则去处理每一条边,建议使用左闭右开。一、经典例题给你一个正整数n,生成一个包含1到n2所有元素,且元素......
  • 算法刷题_数组篇
    算法刷题笔记Day2_数组篇_长度最小的子数组文章目录算法刷题笔记Day2_*数组篇*_长度最小的子数组前言一、暴力解法二、滑动窗口法(推荐使用)三、相关例题补充水果成篮总结前言题目:给定一个含有n个正整数的数组和一个正整数s,找出该数组中满足其和≥s的长度最......
  • 非煤矿山算法智慧矿山一体机行人不行车违章识别算法如何实时监控与分析井下交通状况?
    在矿山安全管理中,确保井下交通的顺畅与安全是至关重要的。随着人工智能和深度学习技术的进步,行人不行车违章识别AI分析算法已经成为提升矿山安全管理水平的重要工具。这种算法能够实时监控和分析井下行人和车辆的行驶情况,有效预防和减少违章行为和事故的发生。本文将详细介绍这一A......
  • 算法网关视频分析网关高清网络球型摄像机接通电源后,不自检,无图像或伴有噪声的原因排查
    面对高清网络球型摄像机在接通电源后可能出现的不自检、无图像或伴有噪声的问题,及时而准确的诊断和解决措施至关重要。这些情况不仅影响监控效果,也可能暗示着设备或配置上的问题。以下是一些系统的排查步骤和解决方案,旨在帮助快速定位问题并恢复摄像机的正常运作。1、电源检查1......
  • AI智能算法视频分析网关接入的网络摄像机在通电后电源灯或网口等都不亮是什么原因?
    在安装和使用网络摄像机的过程中,我们可能会遇到一些技术问题,其中之一就是摄像机在通电后电源灯或网口等指示灯不亮。这种情况可能由多种原因引起,从摄像机本身的故障到供电问题都有可能。为了确保监控系统的稳定运行,了解这些潜在的问题及其解决方法是非常重要的。以下是一些可能导......