题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3547

题目大意:求用$C$种颜色给立方体的8个顶点染色的本质不同的方法。两种方法本质不同即不能通过旋转立方体使得两个立方体的染色情况一致。

简要题解:首先可以得到有24种组合旋转方式。根据Polya定理以及群论中的拉格朗日定理,然后再自己多想一想,就可以得到:$Ans=\frac{x^8+Ax^4+Bx^2+Cx}{24}$,可知有3个未知数,然后样例正好有3组数据,所以可以解方程解得$A=17,B=6,C=0$。注意第三个数据是模了$10^{15}$次方的,但是显然$112^4$的四次方并不会超过$10^{15}$,所以也可以拿来使用。最后直接高精度就可以了。

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define K 10
#define D 15 const int T[] = {, , , , };
int Case, n; struct Big
{
int len, num[];
Big () {len = ; memset(num, , sizeof(num));}
void init(int k)
{
len = ;
memset(num, , sizeof(num));
for (; k; k /= K)
num[++ len] = k % K;
len = max(len, );
}
void Add(Big a)
{
len = max(len, a.len);
for (int i = ; i <= len; i ++)
num[i] += a.num[i];
for (int i = ; i < len; i ++)
if (num[i] >= K)
{
num[i + ] ++;
num[i] -= K;
}
if (num[len] >= K)
{
num[len + ] = ;
num[len ++] -= K;
}
}
void Times(Big a)
{
Big b;
b.len = len + a.len - ;
for (int i = ; i <= len; i ++)
for (int j = ; j <= a.len; j ++)
b.num[i + j - ] += num[i] * a.num[j];
for (int i = ; i < b.len; i ++)
if (b.num[i] >= K)
{
b.num[i + ] += b.num[i] / K;
b.num[i] %= K;
}
while (b.num[b.len] >= K)
{
b.num[b.len + ] += b.num[b.len] / K;
b.num[b.len ++] %= K;
}
len = b.len;
for (int i = ; i <= len; i ++)
num[i] = b.num[i];
}
void Multi(int k)
{
for (int i = ; i <= len; i ++)
num[i] *= k;
for (int i = ; i < len; i ++)
if (num[i] >= K)
{
num[i + ] += num[i] / K;
num[i] %= K;
}
while (num[len] >= K)
{
num[len + ] += num[len] / K;
num[len ++] %= K;
}
}
void Divide(int k)
{
for (int i = len; i >= ; i --)
{
if (i > ) num[i - ] += (num[i] % k) * K;
num[i] /= k;
}
for (; !num[len] && len > ; len --) ;
}
void out()
{
for (int i = min(D, len); i; i --)
printf("%d", num[i]);
puts("");
}
}A[], Ans; int main()
{
scanf("%d", &Case);
for (int Test = ; Test <= Case; Test ++)
{
scanf("%d", &n);
A[].init(n), Ans.init();
for (int i = ; i <= ; i ++)
{
A[i] = A[i - ];
A[i].Times(A[i - ]);
A[i].Multi(T[i]);
Ans.Add(A[i]);
A[i].Divide(T[i]);
}
Ans.Divide();
printf("Case %d: ", Test);
Ans.out();
}
return ;
}

HDOJ 3547

 #include <cstdio>
typedef long long LL;
#define Mod 10000000000000000LL const int Base[] = {, , , };
const LL Ans[] = {0LL, 23LL, 296LL, 2675058176LL}; struct Frac
{
LL fz, fm;
Frac (LL _fz = 0LL, LL _fm = 0LL) {fz = _fz, fm = _fm;}
LL Abs(LL x)
{
return x > ? x : -x;
}
LL gcd(LL x, LL y)
{
return !y ? x : gcd(y, x % y);
}
void Simplify()
{
LL d = gcd(Abs(fz), Abs(fm));
fz /= d, fm /= d;
if (fm < ) fm = -fm, fz = -fz;
}
Frac operator + (const Frac a)
{
Frac b;
b.fz = fz * a.fm + fm * a.fz;
b.fm = fm * a.fm;
b.Simplify();
return b;
}
Frac operator - (const Frac a)
{
Frac b;
b.fz = fz * a.fm - fm * a.fz;
b.fm = fm * a.fm;
b.Simplify();
return b;
}
Frac operator * (const Frac a)
{
Frac b;
b.fz = fz * a.fz;
b.fm = fm * a.fm;
b.Simplify();
return b;
}
Frac operator / (const Frac a)
{
Frac b;
b.fz = fz * a.fm;
b.fm = fm * a.fz;
b.Simplify();
return b;
}
void out()
{
printf("%lld/%lld\n", fz, fm);
}
}X[][], Y[]; inline void Gauss()
{
for (int i = ; i < ; i ++)
for (int j = i + ; j <= ; j ++)
{
Frac t = X[j][i] / X[i][i];
for (int k = i; k <= ; k ++)
X[j][k] = X[j][k] - X[i][k] * t;
Y[j] = Y[j] - Y[i] * t;
}
for (int i = ; i; i --)
{
Frac sum;
sum.fz = 0LL, sum.fm = 1LL;
for (int j = i + ; j <= ; j ++)
sum = sum + X[i][j] * Y[j];
Y[i] = (Y[i] - sum) / X[i][i];
}
} int main()
{
for (int i = ; i <= ; i ++)
{
for (int j = ; j; j --)
{
if (j == ) X[i][j].fz = Base[i];
else X[i][j].fz = X[i][j + ].fz * X[i][j + ].fz;
X[i][j].fm = 1LL;
}
Y[i].fz = Ans[i], Y[i].fm = 1LL;
}
Gauss();
for (int i = ; i <= ; i ++)
Y[i].out();
return ;
}

HDOJ 3547 (Gauss)

HDOJ 3547 DIY Cube 解题报告的更多相关文章

  1. hdu 3547 DIY Cube (Ploya定理)

    DIY Cube Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total S ...

  2. codeforces A. Black-and-White Cube 解题报告

    题目链接:http://codeforces.com/problemset/problem/323/A 题目意思:给定值 k ,需要输出 k 个 k 行 k 列的单位立方体各表示什么颜色(或者是黑色或 ...

  3. ACM -- 算法小结(七)Phone list解题报告

          HDOJ -- Phone list解题报告 问题描述:给出一些电话号码,如果有共同前缀则输出NO,如果没有则输出YES. 解题关键:将电话号码进行字符串排序,相邻的电话号码进行比较 Sa ...

  4. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  5. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  6. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  7. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  8. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  9. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

随机推荐

  1. lua定时器与定时任务的接口设计

    在所有的服务器编程当中,定时任务永远是一个不可或缺的需求.最直接的需求就是,每天凌晨0点0分的时候总是有一大堆的各种精力重置.怎么来设计这个接口呢,想了几个方案: 每秒触发 每分钟触发 每整点触发 每 ...

  2. 全选按钮的设定和POST处理当前循环的列表

    以下为全选按钮的代码,通过class实现. //全选按钮 $(function () { $("#selectall").change(function () { var isch ...

  3. php验证字符串是否以逗号隔开包括中文字符串

    if(preg_match('/^[\x{4e00}-\x{9fa5}\w]+(,[\x{4e00}-\x{9fa5}\w]+)*$/u','体育,娱乐')){ echo 'ok';}

  4. 4月12日学习笔记——jQuery事件

    下面是在 jQuery 中最常使用的 bind()方法举例:$("#testDiv4").bind("click", showMsg); 我们为 id 是 te ...

  5. 《锋利的jQuery》心得笔记--Three Sections

    第六章 1.    JavaScript的Ajax的实现步骤: 1)         定义一个函数用来异步获取信息 function Ajax(){ } 2)         声明: var xmlH ...

  6. DailyWallpaper v1.02 released

    上次忘了写软件说明,先补上一个. 软件说明: 每天定时(暂定上午11点)下载美国国家地理网站的photo of the day图片作为桌面壁纸.下载图片会以日期为名称保存在C:\DailyWallpa ...

  7. Poj OpenJudge 百练 1062 昂贵的聘礼

    1.Link: http://poj.org/problem?id=1062 http://bailian.openjudge.cn/practice/1062/ 2.Content: 昂贵的聘礼 T ...

  8. OSX 上初步尝试 asp.net 5

    去年微软最令开源狗界振奋的消息就是 ASP.NET 的开放与开源这一消息了. 根据微软的介绍,与我之前的一些总结,可以看到 ASP.NET 以及 .NET 平台会有下面几个变化: 代码使用 Apach ...

  9. jQuery EasyUI 数据网格 - 启用行内编辑(转自http://www.runoob.com/jeasyui/jeasyui-datagrid-datagrid12.html)

    可编辑的功能是最近添加到数据网格(datagrid)的.它可以使用户添加一个新行到数据网格(datagrid).用户也可以更新一个或多个行.本教程向您展示如何创建一个数据网格(datagrid)和内联 ...

  10. 应用js改变问章字体大小

    刚来公司的时候领导给分配的都是一些简单的简单的简单的.....任务 一次叫我把文章的字体大小变换功能写出来.在网上搜了很多都不管用!不过功夫不负有心人还是被我找到了!拿出来分享下! <scrip ...