首页 > 其他分享 >魔法手链

魔法手链

时间:2024-08-10 13:49:02浏览次数:4  
标签:... frac 个点 魔法 涂色 编号 手链 题意

先拓展一个之前讲过的模型的性质

对于一个编号在\([0,n)\)的环(顺时针编号),从编号为\(x\)的点开始顺时针跳,每次跳\(k\)步,那么最终经过的点一共有\(\frac{n}{d}\)个(其中\(d=\gcd(n,k)\)),如果我们将这\(\frac{n}{d}\)个点按照编号顺序排成一个圆(不是按经过的顺序),那么相邻两个点之间的距离为\(d\)

证明:显然将这\(\frac{n}{d}\)个点按照编号顺序排成一个圆后,这个圆的总长度为\(n\)(相邻两点之间的距离为两点编号差的绝对值)。考虑每个点的编号的形式,为\(x+t_1k-t_2n\),因为是从\(x\)每次跳\(k\)步,当跳过\(n\)时就要减去\(n\),所以编号的形式就是\(k,n\)的线性组合。故编号可以写作\(x+td\),也就是说相邻两个点的距离是\(d\)的倍数,至少为\(d\);而总长度为\(n\),当且仅当任意相邻两个点之间的距离为\(d\)才为\(n\)(否则的话会更大),证毕

有了这个性质,我们就可以知道,原图一共被分成了\(d\)个环,每个环的起点为\(x,x+1,x+2,...,x+d-1\)

现在我们考虑Burnside引理,假设我们现在已经获得了\(S\)(也就是满足题意的所有涂色方案),置换群\(G\)即顺时针旋转\(0,1,2,...,n-1\)步,我们现在要求的就是\(|S/G|\),只需要求\(|S^g|\)

现在我们考虑对于一个固定的\(g\)(也就是每次跳的步数\(k\)已经知道了),那么根据上面的结论,我们只用考虑\(0,1,2,...,d-1\)这\(d\)个点构成的环满足题意的涂色方案一共有多少种就好了

为什么这里不能用Polya定理:Polya定理的内容就是\(|B^{c(g)}|=|S^g|\),可以想一下这个为什么成立,主要原因还是因为各个循环置换之间互不影响,所以可以任意涂色;而这里显然是会互相影响的,所以只能用Burnside引理

计算\(d\)个点构成的环满足题意的涂色方案一共有多少种:很显然的环形DP,但是这里时间复杂度卡的比较紧,如果采用容斥原理(即按照线形计算,最后强制第一个点和最后一个点涂相同颜色)的话会超时(因为你要枚举第一个点涂的颜色),此时有一个优化:不采用容斥原理,而是采用正面计算,将\(f\)从一维变成二维,\(\forall i∈[0,m),f[i][i]=1\),这就是说第\(i\)个行向量表示第一个点只能涂第\(i\)种颜色,最后得到的数组经过的时间为\(d+1\)(注意不是\(d\),因为我们要求最后一个点和第一个点涂的颜色相同,这里相当于断环成链了),然后加上\(f\)的对角线就好了

计算完\(f\)后,我们还不能枚举\(g\),因为\(n\)太大了,此时肯定只能枚举\(d\),最后不难知道要计算\(\phi(\frac{n}{d})\),这种计算约数的欧拉函数的技巧见这篇总结

标签:...,frac,个点,魔法,涂色,编号,手链,题意
From: https://www.cnblogs.com/dingxingdi/p/18352224

相关文章

  • python的函数、魔法方法和案例
    1.python函数中self的用法在Python中,self 是一个对当前实例(对象)的引用,用于访问属于该类的变量和方法。在定义类的方法时,通常需要将 self 作为第一个参数。这允许在类的实例上调用方法时,自动将实例本身作为参数传递给方法。classPerson:def__init__(self,name......
  • 涨冷门知识之CSS魔法:边距合并
    后端同学问了一个问题:“为什么背景色没有充满?”F12,inspect,哎嗨,p标签存在默认边距源码如下:点击查看代码<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,i......
  • NGUI Tweens组件:实现流畅动画的魔法
    引言在Unity游戏开发中,UI动画是提升用户界面交互性和吸引力的重要手段。NGUI(Next-GenUI)框架中的Tweens组件,为UI元素提供了平滑且高效的动画效果。本文将详细介绍NGUITweens的使用方法和技巧,帮助你轻松实现UI动画效果。NGUITweens简介NGUITweens是NGUI框架中的一组用......
  • 程序员的魔法石!
    本文由ChatMoney团队出品AI自己写代码,这只是传说?还是摸鱼新指南?AI出现之前,从来都是老板或产品经理提需求,程序员熬夜加班吭哧吭哧写代码或者是从Github,Stackoverflow上control+c,control+v。但随着大语言模型的发展,AI自动补全和理解意图的能力突飞猛进,不仅能补全中文,英文,当然也......
  • 11:Python字符串的魔法属性2
    test='alex'v=test[2]#索引,下标,获取字符串中的某一个字符print(v,-1)test='alexsasdf'v=test[0:3]#0=<v<3print(v,-2)v1=test[0:-1]#切片print(v1,-3)v2=len(test)print(v2,-4)v3=len("我是中国人")#len获取当前字符串中由几个字符组成,python2......
  • 洛谷P2801 教主的魔法之分块板子
    洛谷P2801题解传送锚点摸鱼环节教主的魔法题目描述教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是\(N\)个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为\(1,2,\ldots,N\)。每个人的身高一开始都是不超过\(1000\)......
  • P2119 [NOIP2016 普及组] 魔法阵
    P2119[NOIP2016普及组]魔法阵传送门1我们可以先写出\(O(m^4)\)的暴力#include<bits/stdc++.h>#defineintlonglong#definePIIpair<int,int>usingnamespacestd;constintinf=0x3f3f3f3f;constintMOD=1e9+7,N=4e4+5;intn,m,ans[N......
  • 8:Python字符串的魔法属性
    test="alex"v=test.capitalize()#首字母的大写print(v)test1="alEx"v1=test1.casefold()#所有字母变小写print(v1)test2="alEx"v2=test2.center(20,"*")#设置宽度,并将内容居中,20代指总长度,*代指空白位置填充且只能填一个字符print(v2)test3="alexralexr"v3=te......
  • 掌握 IPython %%time 魔法命令:高效测量代码块执行时间
    引言在编程和数据分析中,了解代码的执行时间是优化性能的关键步骤。IPython,作为一个强大的交互式计算环境,提供了多种工具来帮助用户测量和优化代码。其中,%%time魔法命令是IPython中用来测量代码块执行时间的便捷工具。本文将详细介绍%%time魔法命令的使用方法,并通过一......
  • 探索 IPython 中的 %%javascript 魔法命令:运行 JavaScript 代码的秘籍
    引言IPython是一个强大的交互式计算环境,它不仅支持Python语言,还通过各种魔法命令扩展了其功能。其中,%%javascript魔法命令是IPython扩展中一个非常有趣的特性,它允许用户在IPython环境中直接运行JavaScript代码。这对于需要在数据科学和科学计算中使用JavaScript......