题意

用红黄绿 333 种颜色给一个有 nnn 个珠子的环形项链染色,要求相邻珠子颜色不同且绿色珠子个数小于等于 kkk ,求本质不同的染色方案。

3≤n≤106,0≤k≤1063\le n\le 10^6,\ 0\le k\le 10^63≤n≤106, 0≤k≤106


题解

由于要考虑旋转重复的情况,所以考虑使用 Polya\rm PolyaPolya 定理,设 fn,mf_{n,m}fn,m​ 表示长度为 nnn 的环且绿色个数为 mmm 时且不考虑旋转的方案数。对于旋转 iii 位的置换,循环置换的数量为 gcd⁡(i,n)\gcd(i,n)gcd(i,n) ,所以
ans=1n∑i=0n−1∑j=0⌊kgcd⁡(i,n)n⌋fgcd⁡(i,n),j=1n∑d∣n∑i=1n[gcd⁡(i,n)=d]∑j=0⌊kdn⌋fd,j=1n∑d∣n∑i=1nd[gcd⁡(i,nd)=1]∑j=0⌊kdn⌋fd,j=1n∑d∣nφ(nd)F(d,⌊kdn⌋)\begin{aligned} ans&=\frac1n\sum_{i=0}^{n-1}\sum_{j=0}^{\lfloor\frac{k\gcd(i,n)}n\rfloor}f_{\gcd(i,n),j}\\ &=\frac1n\sum_{d\mid n}\sum_{i=1}^n[\gcd(i,n)=d]\sum_{j=0}^{\lfloor \frac{kd}n\rfloor}f_{d,j}\\ &=\frac1n\sum_{d\mid n}\sum_{i=1}^{\frac nd}[\gcd(i,\frac nd)=1]\sum_{j=0}^{\lfloor \frac{kd}n\rfloor}f_{d,j}\\ &=\frac1n\sum_{d\mid n}\varphi(\frac nd)F(d,\lfloor \frac{kd}n\rfloor) \end{aligned} ans​=n1​i=0∑n−1​j=0∑⌊nkgcd(i,n)​⌋​fgcd(i,n),j​=n1​d∣n∑​i=1∑n​[gcd(i,n)=d]j=0∑⌊nkd​⌋​fd,j​=n1​d∣n∑​i=1∑dn​​[gcd(i,dn​)=1]j=0∑⌊nkd​⌋​fd,j​=n1​d∣n∑​φ(dn​)F(d,⌊nkd​⌋)​

考虑如何求 fn,mf_{n,m}fn,m​ 。由于 mmm 个绿色珠子会把环分成 mmm 个连续段,每个段都只有 222 种方案(红黄红黄…\ldots…,黄红黄红…\ldots…),故方案数为 2m2^m2m 。考虑插空法,若绿色没有填在第 nnn 位,方案数为 Cn−mmC_{n-m}^mCn−mm​ ;若绿色填了第 nnn 位,则第 1 位和第 n−1n-1n−1 位均不能填,方案数为 Cn−m−1m−1C_{n-m-1}^{m-1}Cn−m−1m−1​ 。

综上可得 fn,m=2m(Cn−m−1m−1+Cn−mm)f_{n,m}=2^m\big(C_{n-m-1}^{m-1}+C_{n-m}^{m}\big)fn,m​=2m(Cn−m−1m−1​+Cn−mm​) ,特别的 fn,0=2⋅[2∣n]f_{n,0}=2\cdot[2\mid n]fn,0​=2⋅[2∣n] 。

所以直接枚举所有约数暴力计算即可。 时间复杂度 O(nlog⁡log⁡n)O(n\log\log n)O(nloglogn)

#include <bits/stdc++.h>
const int N = 1e6 + 5, P = 998244353;
using namespace std;
using arr = int[N];
using ll = long long;
arr fac, ifac, inv, pr, phi, pw;
inline void Init(int n) {vector<char> vis(n + 1, 0);fac[0] = fac[1] = ifac[0] = ifac[1] = inv[1] = phi[1] = pw[0] = 1,pw[1] = 2;for (int i = 2; i <= n; ++i) {if (!vis[i])pr[++pr[0]] = i, phi[i] = i - 1;for (int j = 1, x; j <= pr[0] && (x = i * pr[j]) <= n; ++j) {vis[x] = 1, phi[x] = phi[i];if (i % pr[j])phi[x] *= pr[j] - 1;else {phi[x] *= pr[j];break;}}pw[i] = (pw[i - 1] << 1ll) % P;inv[i] = (ll)(P - P / i) * inv[P % i] % P;fac[i] = (ll)fac[i - 1] * i % P;ifac[i] = (ll)ifac[i - 1] * inv[i] % P;}
}
inline ll C(int n, int m) {return n >= m ? (ll)fac[n] * ifac[m] % P * ifac[n - m] % P : 0ll;
}
inline ll F(int n, int k) {ll f = n & 1 ? 0 : 2;for (int m = 1; m <= min(k, n / 2); ++m)f += pw[m] * (C(n - m, m) + C(n - m - 1, m - 1)) % P;return f % P;
}
int n, k;
inline void Solve() {ll Ans = 0;for (int d = 1; d <= n; ++d)if (n % d == 0)Ans += phi[n / d] * F(d, (ll)k * d / n) % P;printf("%lld\n", Ans % P * inv[n] % P);
}
int main() {Init(1e6);scanf("%*d");while (~scanf("%d%d", &n, &k))Solve();return 0;
}

[HDU6960]Necklace of Beads相关推荐

  1. 【POJ 1286】Necklace of Beads(polya定理)

    [POJ 1286]Necklace of Beads(polya定理) Necklace of Beads Time Limit: 1000MS   Memory Limit: 10000K Tot ...

  2. 【数论】【Polya定理】poj1286 Necklace of Beads

    Polya定理:设G={π1,π2,π3........πn}是X={a1,a2,a3.......an}上一个置换群,用m中颜色对X中的元素进行涂色,那么不同的涂色方案数为:1/|G|*(mC(π1 ...

  3. Necklace of Beads

    http://poj.org/problem?id=1286 // File Name: poj1286.cpp // Author: bo_jwolf // Created Time: 2013年1 ...

  4. Polya定理与Burnside引理及其应用

    Polya定理及其应用 群与置换群 轮换 PolyaPolyaPolya定理 BurnsideBurnsideBurnside引理 PolyaPolyaPolya定理的简单应用 PolyaPolyaP ...

  5. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  6. Burnside引理和Polya定理学习笔记

    前言 求·······的方案数 循环同构算一种 一脸懵逼 (于是我觉得系统的学一遍Burnside引理和Polya定理) 正文 置换 置换的概念 对于一个排列aia_iai​ 我们想成iii输进去会出 ...

  7. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(1)签到题15869

    2021"MINIEYE杯"中国大学生算法设计超级联赛(1) Start Time : 2021-07-20 12:10:00 End Time : 2021-07-20 17:1 ...

  8. POJ的题目分类(两个版本)

    版本一: 简单题 1000A+B Problem 1001Exponentiation 1003 Hangover 1004 Financial Management 1005 I Think I N ...

  9. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

最新文章

  1. html5引入spring标签,[MVC]5 使用Spring标签库
  2. U盘加载速度慢的解决方法
  3. 团队组建阶段,项目经理要做些什么?
  4. day25 java的集合(3)List
  5. Python机器学习:梯度下降法004实现线性回归中的梯度下降法
  6. oracle log.xml分析,Oracle 11g Alert Log日志位置及参数
  7. 成都市交委与摩拜科技联手 助推智慧城市建设
  8. 收藏!本、硕、博、程序员必备神器
  9. [数学建模] 大数据建模五步法
  10. 基于格的密码与SABER
  11. 软件架构模式 mark Richards - 读后总结 2 事件驱动架构
  12. 微信卡券领用中的问题
  13. 在网上疯传的行动艺术照
  14. c语言自动输入一位数字,c语言:要求输入一个四位整数,然后将各位数字按英文输出...
  15. 【基操】word插入的表格无法修改列宽
  16. VLC-你不知道的那些功能-播客
  17. 虚幻四蓝图实战(人物切换汽车控制)
  18. 【EasyExcel】公司文件加密软件导致 Convert excel format exception.You can try specifying the ‘excelType‘ yourself
  19. 编写一个程序,输入梯形的上底,下底和高,输出梯形的面积
  20. 【Axure视频教程】滑动选择器

热门文章

  1. php修改文件临时目录,PHP_详谈PHP文件目录基础操作,我们知道,临时声明的变量是 - phpStudy...
  2. 大家来学 VIM [一]
  3. Hadoop、Yarn相关命令简介
  4. 远控免杀专题(17)-Python-Rootkit免杀(VT免杀率7/69)
  5. 光电编码器与计算机连接模块,计算机-谈述编码器基于增量光电编码器的车速制约器设计论文结论-优度********网...
  6. 数据库之mysql事务原理分析与锁机制 详解
  7. 计算机小游戏有哪些,4399电脑小游戏中有一个和lol类似的游戏叫什么
  8. c# midi窗体_Midi:C#中的Windows MIDI库
  9. JS中的函数定义方式及全局函数
  10. SMS平台发短信的代码