正三角形区域由小三角形组成,第 n 层有 n(n+1)/2 个小三角形。每个小三角形黑/白染色。两种染色若可通过旋转/翻转重合视为相同。求本质不同染色数。
S = n(n+1)/2(S+2)/3(n+1)/2 个点各自成循环,其余配对 → 循环数 (S + (n+1)/2)/2S 个循环Ans = (2^S + 2·2^{(S+2)/3} + 3·2^{(S+(n+1)/2)/2}) / 6
#includeusing namespace std; int main() { int n; scanf("%d", &n); int S = n*(n+1)/2; int m = (S + (n+1)/2) / 2; // 翻转循环数 // 注:需高精度,此处略 printf("%d\n", (2*(1<<((S+2)/3)) + 3*(1< 关键点
- 群封闭性:必须包含所有复合操作(旋转+翻转生成斜向翻转)
- 循环计数:几何归纳得公式
- 高精度:n 较大时 2^S 超长,需大整数库