UVA 10601 - Cubes

题目链接

题意:给定正方体12条棱的颜色,要求用这些棱能组成多少不同的正方体

思路:利用ploya定理去求解,分类讨论,正方体一共24种旋转。相应的旋转方式有4种:

1、不动

2、沿两面中点连线旋转

3、沿对顶点连线旋转

4、沿两棱中点连线旋转

简单推算出每种情况相应的循环组数。在加上组合数学去进行选择颜色求解。注意第4种情况中,有两条棱和其它的循环长度是不同的,能够枚举然后扣掉讨论。

代码:

#include <stdio.h>
#include <string.h> int t, color[6], save[6], c[13][13]; long long solve(int k) {
long long sum = 0, ans = 1;
for (int i = 0; i < 6; i++) {
if (save[i] % k) return 0;
save[i] /= k;
sum += save[i];
}
for (int i = 0; i < 6; i++) {
ans *= c[sum][save[i]];
sum -= save[i];
}
return ans;
} long long solve1() {
memcpy(save, color, sizeof(save));
return solve(1);
} long long solve2() {
memcpy(save, color, sizeof(save));
long long ans = 6 * solve(4);
memcpy(save, color, sizeof(save));
return ans + 3 * solve(2);
} long long solve3() {
memcpy(save, color, sizeof(save));
return 8 * solve(3);
} long long solve4() {
long long ans = 0;
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 6; j++) {
memcpy(save, color, sizeof(save));
save[i]--; save[j]--;
if (save[i] < 0 || save[j] < 0) continue;
ans += 6 * solve(2);
}
}
return ans;
} int main() {
for (int i = 0; i <= 12; i++) {
c[i][0] = c[i][i] = 1;
for (int j = 1; j < i; j++)
c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
}
scanf("%d", &t);
while (t--) {
int col;
memset(color, 0, sizeof(color));
for (int i = 0; i < 12; i++) {
scanf("%d", &col);
color[col - 1]++;
}
printf("%lld\n", (solve1() + solve2() + solve3() + solve4()) / 24);
}
return 0;
}

10601 - Cubes(Ploya)的更多相关文章

  1. UVA 10733 - The Colored Cubes(Ploya)

    UVA 10733 - The Colored Cubes 题目链接 题意:一个立方体.n种颜色,问能涂成多少不同立方体 思路:Ploya求解,正方体相应24种不同旋转一一计算出循环个数就可以.和 U ...

  2. 组合数学(Pólya计数原理):UvaOJ 10601 Cubes

    Cubes You are given 12 rods of equal length. Each of them is colored in certain color. Your task is ...

  3. UVa 10601 (Polya计数 等价类计数) Cubes

    用6种颜色去染正方体的12条棱,但是每种颜色都都限制了使用次数. 要确定正方体的每一条棱,可以先选择6个面之一作为顶面,然后剩下的四个面选一个作为前面,共有24种. 所以正方体的置换群共有24个置换. ...

  4. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

  5. 数学3(博弈+splya)

    数学3(博弈+splya) 标签: 数学 hdu_5194 (打表找规律) 题意 有n和黑球和m个白球,现在一个个的取出这些球,如果是黑球则当前标记为1,白球为0,那么当取完这些球会得到一些序列.问你 ...

  6. polya burnside 专题

    polya题目:uva 11077 Find the Permutationsuva 10294 Arif in DhakaLA 3641 Leonardo's Notebookuva 11077 F ...

  7. 水泡动画模拟(Marching Cubes)

    Marching Cubes算法是三维离散数据场中提取等值面的经典算法,其主要应用于医学领域的可视化场景,例如CT扫描和MRI扫描的3D重建等. 算法主要的思想是在三维离散数据场中通过线性插值来逼近等 ...

  8. Codeforces525E Anya and Cubes(双向搜索)

    题目 Source http://codeforces.com/contest/525/problem/E Description Anya loves to fold and stick. Toda ...

  9. [saiku] 系统登录成功后查询Cubes

    一.系统启动时初始化ds和conn 1.查询出目前系统拥有的Datasources和Connections放入内存中 2.比对saiku-datasources中的ds是否有新增的,如果有,创建新的d ...

随机推荐

  1. AES/DES 可逆性加密算法 -- java工具类

    package com.lock.demo.service; import org.apache.tomcat.util.codec.binary.Base64; import javax.crypt ...

  2. Linux系统权限

    目 录 第1章 权限描述    1 1.1 权限描述    1 1.2 文件权限对应表    1 1.3 三种角色    1 1.4 文件和用户以及组之间的关系    1 第2章 修改权限命令chmo ...

  3. Android获取屏幕大小(Px)

    private DisplayMetrics dm = new DisplayMetrics(); TextView tv; Button bu; @Override protected void o ...

  4. NYOJ760-See LCS again,有技巧的暴力!

    See LCS again 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 There are A, B two sequences, the number of ele ...

  5. UVA12103 贪心+置换

    题意:给出26个大写字母的置换B,问是否存在一个置换A,舍得A^2=B,如果存在输出Yes,否则输出No 题解: 研究一下置换A与A^2关系. 假设A=(a1 a2 a3)(b1 b2 b3 b4) ...

  6. BOOST asio 例程daytime不使用库编译方法

    在不使用lib库编译daytime client程序时,按照<Boost程序库完全开发指南>添加的定义 #define BOOST_REGEX_NO_LIB#define BOOST_DA ...

  7. python学习之 - re模块

    re模块功能:实现字符串匹配. 元字符 描述\ 将下一个字符标记符.或一个向后引用.或一个八进制转义符.例如,“\\n”匹配\n.“\n”匹配换行符.序列“\\”匹配“\”而“\(”则匹配“(”.即相 ...

  8. 如何使用google解决问题

    如何使用google解决问题 redguardtoo著 文章选自2004年<程序员>杂志第8期P56 前面收集了篇如何问问题的文章就是<学会提问>http://blog.pro ...

  9. MySQL查询count(*)、count(1)、count(field)的区别收集

    经过查询研究得出这个和MySQL中用什么引擎有关,比如InnoDB和MyISAM在处理这count(*).count(1).count(field)都有不同的方式,还有就是和版本都有关系,不同的版本会 ...

  10. 数据库中的DDL/DML/DCL解释(转)

    DDL is Data Definition Language statements. Some examples:数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 1.CREATE - ...