【BZOJ 1005】[HNOI2008]明明的烦恼(化简的另一种方法)
【题目链接】:http://www.lydsy.com/JudgeOnline/problem.php?id=1005
【题意】
【题解】
题目和题解在上一篇;
这里 对
【(m^(n-2-tot))* (n-2)!】/【(n-2-tot)!* (d[1]-1)!*(d[2]-1)!……(d[n]-1)!】;
这个式子的化简再说一个方法;
对于n!
最后分解成质因子的时候;
质因子p的指数应该为
∑(n/i);
这里i为p,p^2,p^3….p^x,且p^x<=n
这样;
因为最大要求的阶乘为(n-2)!
所以先处理出2..n-2之间哪些数是质数;
然后对于x!
直接枚举2..x之间的那些质数;
然后i=p,p平方,p立方,p的4次方..那样加上n/i;
知道某个质数的指数之后,直接根据是分子还是分母,分别加上或减去那个∑(n/i)就好;
这样就不用1..x里面每个数都再去分解一次质因数了;
//直接暴力搞
for (int i = 1;i <= x;i++)
{
int x = i;
for (int j= 2;j*j <= x;j++)
while (x%j==0)
{
cnt[j]->change;
x/=j;
}
}
//更优雅的方法
for (int i = 2;i <= x;i++)
{
if (zhishu[i])
{
zhi=0
for (int j = i;j <= x;;j*=i)
zhi+=x/j;
cnt[i]->change(zhi);
}
}
【完整代码】
/**************************************************************
Problem: 1005
User: chengchunyang
Language: C++
Result: Accepted
Time:36 ms
Memory:1316 kb
****************************************************************/
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1100;
int n,d[N],m,tot,cnt[N];
int ans[N],len = 1;
bool bo[N];
void go(int t,int x)
{
rep1(i,2,t)
if (bo[i])
{
int num = 0;
for (int j = i;j <= t;j*=i)
num+=t/j;
cnt[i]+=x*num;
}
}
void cheng(int p)
{
int x = 0;
rep1(i,1,len)
{
ans[i] = ans[i]*p+x;
x = ans[i]/10;
ans[i]%=10;
}
while (x>0)
{
ans[++len] = x;
x = ans[len]/10;
ans[len]%=10;
}
}
bool is(int x)
{
rep1(i,2,int(sqrt(x)))
if (x%i==0)
return false;
return true;
}
int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);
rep1(i,1,n)
{
rei(d[i]);
if (d[i]==0) return puts("0"),0;
if (d[i]==-1)
m++;
else
d[i]--,tot+=d[i];
}
if (n-2<tot)
return puts("0"),0;
memset(bo,false,sizeof bo);
rep1(i,2,n-2)
if (is(i)) bo[i] = true;
go(n-2,1);
go(n-2-tot,-1);
rep1(i,1,n)
go(d[i],-1);
ans[1] = 1;
rep1(i,2,n)
rep1(j,1,cnt[i])
cheng(i);
rep1(i,1,n-2-tot)
cheng(m);
rep2(i,len,1)
printf("%d",ans[i]);
return 0;
}
【BZOJ 1005】[HNOI2008]明明的烦恼(化简的另一种方法)的更多相关文章
- BZOJ 1005 [HNOI2008] 明明的烦恼(组合数学 Purfer Sequence)
题目大意 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为 1 到 N 的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为 N( ...
- BZOJ 1005: [HNOI2008]明明的烦恼 Purfer序列 大数
1005: [HNOI2008]明明的烦恼 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- bzoj 1005: [HNOI2008]明明的烦恼 prufer编号&&生成树计数
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2248 Solved: 898[Submit][Statu ...
- BZOJ 1005: [HNOI2008]明明的烦恼( 组合数学 + 高精度 )
首先要知道一种prufer数列的东西...一个prufer数列和一颗树对应..然后树上一个点的度数-1是这个点在prufer数列中出现次数..这样就转成一个排列组合的问题了.算个可重集的排列数和组合数 ...
- BZOJ 1005 [HNOI2008]明明的烦恼 (Prufer编码 + 组合数学 + 高精度)
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5786 Solved: 2263[Submit][Stat ...
- BZOJ 1005 [HNOI2008]明明的烦恼 purfer序列,排列组合
1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少 ...
- bzoj 1005 [HNOI2008] 明明的烦恼 (prufer编码)
[HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5907 Solved: 2305[Submit][Status][Di ...
- BZOJ 1005: [HNOI2008]明明的烦恼(prufer数列)
http://www.lydsy.com/JudgeOnline/problem.php?id=1005 题意: Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标 ...
- BZOJ.1005.[HNOI2008]明明的烦恼(Prufer 高精 排列组合)
题目链接 若点数确定那么ans = (n-2)!/[(d1-1)!(d2-1)!...(dn-1)!] 现在把那些不确定的点一起考虑(假设有m个),它们在Prufer序列中总出现数就是left=n-2 ...
随机推荐
- ACdream 1127 Base Station (离线查询+树状数组)
题目链接: http://acdream.info/problem?pid=1127 题目: 移动通信系统中,通信网的建立主要通过基站来完成. 基站可以分为主基站和子基站.子基站和各个移动用户进行连接 ...
- iOS_06_Mac os X
Mac os X 系统简介 * 苹果公司专门为苹果电脑设计的操作系统. * 以坚如磐石的UNIX为基础,既简单易用且功能强大. * x 是一个罗马数字正式的发音位“十”(ten),连续了先前的Mac ...
- 微服务实战(二):使用API Gateway - DockOne.io
原文:微服务实战(二):使用API Gateway - DockOne.io [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用 ...
- 5W1H分析法和5W2H分析法
5W1H分析法也称六何分析法,是一种思考方法,也可以说是一种创造技法.是对选定的项目.工序或操作,都要从原因(WHY).对象(WHAT).地点(WHERE).时间(WHEN).人员(WHO).方法(H ...
- vagrant 的安装与使用
1. 安装 ubuntu 安装vagrant过程 ubuntu 安装 vagrant 时需要首先安装 virtualbox: (1)下载安装与当前 ubuntu 版本相适应的 virtualbox 安 ...
- akka---Getting Started Tutorial (Java): First Chapter
原文地址:http://doc.akka.io/docs/akka/2.0.2/intro/getting-started-first-java.html Introduction Welcome t ...
- UVA 11090 - Going in Cycle!! SPFA
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- SpringBoot学习:获取yml和properties配置文件的内容(转)
项目下载地址:http://download.csdn.net/detail/aqsunkai/9805821 (一)yml配置文件: pom.xml加入依赖: <!-- 支持 @Configu ...
- C API函数描写叙述(S-W)
25.2.3.59. mysql_select_db() int mysql_select_db(MYSQL *mysql, const char *db) 描写叙述 使由db指定的数据库成为由mys ...
- POJ 2590 Steps (ZOJ 1871)
http://poj.org/problem?id=2590 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1871 题目大 ...