题目链接: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. android View 绘制完成监听

    <span style="font-size:18px">//view重绘时回调 view.getViewTreeObserver().addOnDrawListene ...

  2. UILabel自适应高、宽

    根据Label和字体大小自适应高度 - (CGFloat)getHeightWithLabel:(UILabel *)label andFontSize:(CGFloat)size { label.n ...

  3. 20141104--SQL,查询习题,约束

    --创建学生信息表:学号,姓名,班级,性别,语文教师,数学教师,英语教师 --创建一个教师表:编号,姓名,课程,性别,出生日期 --创建一个分数表:语文,数学,外语,学号 --查询 语文成绩最高的学生 ...

  4. (转)Linux vmstat命令实战详解

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最 ...

  5. sicily 1022. Train Problem

    本题主要是出栈入栈顺序的问题 Home Problems My Status Standing <->           1022. Train Problem     Total: 2 ...

  6. USB接口介绍

        USB设备系统分为两个部分,USB Host端和USB Device端,以USB接口的U盘为例子,U盘自身是一个USB Device,PC机的USB接口以及相关的控制电路为USB Host部分 ...

  7. 2015.1写留言板的时用的 知识点和函数 --->总结

    一:时间函数和uniqid() 1:uniqid():生成唯一的id, 无参数返回的字符串的长度为13,有参数为23 2:时间和时间戳相互转换的php函数 ①:time()  返回当前unix的时间戳 ...

  8. Android开发面试题(一)

    1.String和StringBuffer有什么本质区别? 本质区别:String字符串不可变,每次修改字符串必须要重新赋值(生成新的对象)才能修改:StringBuffer字符串可变,可以直接对字符 ...

  9. 为Eclipse设置背景色

    1:打开Eclipse,在菜单栏找到Help—>Install new software.. 2:在打开的Work with中输入: Update Site - http://eclipse-c ...

  10. MySQL多实例-精典故障案例

    很久以前搭建过MySQL多实例,记得当时很顺利,呵呵!今天公司因为业务需要,我再一次搭建多实例.安装完MySQL后,初始化两个实例时,出现如下报错: 150915  1:10:36 [ERROR] C ...