UVA 10601 Cubes
生活随笔
收集整理的這篇文章主要介紹了
UVA 10601 Cubes
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
UVA_10601
? ? 對(duì)于一個(gè)立方體,一共有24種本質(zhì)不同的旋轉(zhuǎn),整體上分為四類:
? ? ①靜止不動(dòng);
? ? ②以某面與對(duì)面的中心的連線為軸,沿一個(gè)方向旋轉(zhuǎn)90度、180度、270度;
? ? ③以某棱與對(duì)棱的中心的連線為軸,沿一個(gè)方向旋轉(zhuǎn)180度;
? ? ④以某個(gè)頂點(diǎn)與對(duì)頂點(diǎn)的連線為軸,沿一個(gè)方向旋轉(zhuǎn)60度、120度。
??? 對(duì)于每類都可以用組合數(shù)計(jì)算出不動(dòng)方案的種數(shù),然后應(yīng)用一下burnside引理就可以得到最后的結(jié)果了。
#include<stdio.h> #include<string.h> int a[6], b[6], C[15][15]; void prepare() {int i, j;memset(C, 0, sizeof(C));C[0][0] = 1;for(i = 1; i <= 12; i ++){C[i][0] = C[i][i] = 1;for(j = 1; j < i; j ++)C[i][j] = C[i - 1][j] + C[i - 1][j - 1];} } void init() {int i, k;memset(a, 0, sizeof(a));for(i = 0; i < 12; i ++){scanf("%d", &k);++ a[k - 1];} } long long calculate(int m) {int i, j, n = 0;long long ans = 1;for(i = 0; i < 6; i ++){if(b[i] % m != 0)return 0;b[i] /= m;n += b[i];}for(i = 0; i < 6; i ++){ans *= C[n][b[i]];n -= b[i];}return ans; } long long fsolve() {long long ans = 0;memcpy(b, a, sizeof(a));ans += calculate(1);memcpy(b, a, sizeof(a));ans += 6 * calculate(4);memcpy(b, a, sizeof(a));ans += 3 * calculate(2);return ans; } long long esolve() {int i, j;long long ans = 0;for(i = 0; i < 6; i ++)for(j = 0; j < 6; j ++){memcpy(b, a, sizeof(a));-- b[i], -- b[j];if(b[i] < 0 || b[j] < 0)continue;ans += 6 * calculate(2);}return ans; } long long vsolve() {long long ans = 0;memcpy(b, a, sizeof(a));ans = 8 * calculate(3);return ans; } void solve() {long long ans = 0;ans += fsolve();ans += esolve();ans += vsolve();printf("%lld\n", ans / 24); } int main() {int t;prepare();scanf("%d", &t);while(t --){init();solve();}return 0; }轉(zhuǎn)載于:https://www.cnblogs.com/staginner/archive/2012/05/21/2511340.html
總結(jié)
以上是生活随笔為你收集整理的UVA 10601 Cubes的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: zen cart 操作-修改
- 下一篇: 解决 FTPClient 出现的553错