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. 厚溥教育1718部数据库连接作业答案,分装一个操作数据库而无需写SQL语句的函数

    <?php header("Content-type:text/html;charset=utf8"); //PHP操作数据库的函数 function phpsql($dbc ...

  2. 9. FILES

    9. FILES FILES表提供有关存储MySQL表空间数据的文件的信息. FILES表提供有关InnoDB数据文件的信息. 在NDB Cluster中,此表还提供有关存储NDB Cluster D ...

  3. 7. ENGINES

    7. ENGINES ENGINES表提供有关存储引擎的信息. 这对于检查是否支持存储引擎或查看默认引擎是什么特别有用. INFORMATION_SCHEMA Name SHOW Name ENGIN ...

  4. 第五章:C++程序的结构

    主要内容: 1.作用域与可见性 2.对象的生存期 3.数据与函数 4.静态成员 5.共享数据的保护 6.友元 7.编译预处理命令 8.多文件结构和工程 作用域:函数原型作用域.块作用域.类作用域.文件 ...

  5. 【模板】CDQ分治

    __stdcall大佬的讲解 这里贴的代码写的是点修改.区间查询的题. #include<cstdio> #include<cstring> #include<algor ...

  6. Nginx学习总结(5)——Nginx基本配置备忘

    Nginx 配置 在了解具体的Nginx配置项之前我们需要对于Nginx配置文件的构成有所概念,一般来说,Nginx配置文件会由如下几个部分构成: # 全局块 ... # events块 events ...

  7. jar包、war包、ear包傻傻分不清?

    在工作中,需要在jboss上deploy一个health check的war包,因此了解一下: Jar文件(扩展名为. Jar,Java Application Archive)包含Java类的普通库 ...

  8. php基础 数组 遍历

    //参数默认值// function abc($a,$b,$c=0){// echo $a,$b,$c;// }// abc(1,3); //可变参数//function def(){// $arr= ...

  9. MacOS & iOS

    MacOS & iOS https://github.com/qinjx/30min_guides/blob/master/ios.md https://www.cnblogs.com/xgq ...

  10. 推荐一个 Java 实体映射工具 MapStruct

    声明: 1.DO(业务实体对象),DTO(数据传输对象). 2.我的代码中用到了 Lombok ,不了解的可以自行了解一下,了解的忽略这条就好. 在一个成熟的工程中,尤其是现在的分布式系统中,应用与应 ...