HDOJ 3547 DIY Cube 解题报告
题目链接: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 解题报告的更多相关文章
- hdu 3547 DIY Cube (Ploya定理)
DIY Cube Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total S ...
- codeforces A. Black-and-White Cube 解题报告
题目链接:http://codeforces.com/problemset/problem/323/A 题目意思:给定值 k ,需要输出 k 个 k 行 k 列的单位立方体各表示什么颜色(或者是黑色或 ...
- ACM -- 算法小结(七)Phone list解题报告
HDOJ -- Phone list解题报告 问题描述:给出一些电话号码,如果有共同前缀则输出NO,如果没有则输出YES. 解题关键:将电话号码进行字符串排序,相邻的电话号码进行比较 Sa ...
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 习题:codevs 1035 火车停留解题报告
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
- 习题: codevs 2492 上帝造题的七分钟2 解题报告
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
随机推荐
- CCNA长语
思科认证网络支持工程师(Cisco Certified Network Associate_CCNA) 专业英文词汇大全 10BaseT-----原始IEEE802.3标准的一部分,1OBaseT是1 ...
- js 用window.open(参数) 打开新窗口,在新窗口怎么获取传过来的参数
unction openwin(taskno){window.open ('playIt.jsp?taskno='+taskno,'play','height=100,width=400,toolba ...
- 网络请求的null值处理
最近项目中经常有遇到从服务器请求的数据是null的情况,这种情况下如果用[dic objectForKey:@"key"]方法,程序会发生崩溃现象,因为项目是以前的老项目,而且有太 ...
- 了解常见的开源协议(BSD, GPL, LGPL,MIT)
一直对各种开源协议比较模糊, 特意在网上搜索了一下资料, 整理总结,以作记录 如果不喜欢长篇大论的话, 看下图就可以了 基本概念了解: 1. Contributors 和 Recipients Con ...
- MYSQL基础03(日期函数)
工作中对日期的处理是经常遇到的,需求可能多种多样,因此重点介绍. 1.获取当前日期 select NOW() -- 结果:2015-10-28 22:41:11 ),NOW() -- 结果 2015- ...
- 精美jQuery插件及源码 前端开发福利
jQuery是一个非常不错的javascript框架,很多前端开发者喜欢的原因不仅是因为jQuery使用起来方便,更重要的是因为它的插件很多,我们可以将这些插件应用到自己的项目中去.下面这些精美的jQ ...
- Jquery 学习二
一.事件编程 1.基本事件(以方法形式存在的) 基本语法: 原生Javascript代码中的事件绑定方式: DOM对象.事件 = 事件的处理程序 jQuery代码中的事件绑定方式: jQuery对 ...
- iOS人机界面指南(翻译)
本文源自于苹果开发者网站的文章iOS Human Interface Guidelines,内容比较多,此处仅仅是部分笔记.
- Android 悬浮窗 WindowManager WindowManager.LayoutParamas
前方高清大图~~~~ 绘制的图片资源: // draw bitmap BitmapDrawable bmpDraw = (BitmapDrawable) getResources().getDrawa ...
- Ubuntu下PHP开发配置(新增redis、sphinx、sqlserver相关配置)
由于本人比较懒,所以一般都是用xampp的直接拿来改的…………(当然xampp中一般php版本都是比较新的用的过程中请大家注意哈,可能会和老版本冲突) 此次除了使用xampp外,还扩展了sphinx, ...