1   首先 ans=c(n,a[0] )*c(n-a[0],a[1])*(n-a[0]-a[1],a[2])......

      a[i]: 含义 在数列中i的个数有a[i]个

2  如何判断 x*y>p(1e18LL)--->乘法变除法 p/x<y

3     如何判断组合数   c (n,m)是否溢出  这里采用交叉乘除 c(n,m)=c(n-1,m-1)*(n/m)

   想办法先除掉m:  1)t=gcd(n,m)   n/=t    m/=t

          2) k=c(n-1,m-1)/m

         3) 再判断 k*n 是否溢出

         其实m最大为20左右。。。

法二: 判断C(n,m)是否溢出 可把每一个数分解为素数的乘积,用加减法代替乘除法 (代码是法一)

1106: xry111的排列

时间限制: 4 Sec  内存限制: 128 MB
提交: 122  解决: 11
[提交][状态][讨论版]

题目描述

fpcsong有一天闲着无聊,就拿了一张纸,写下了n个数a1, a2, ..., an,问xry111这些数的全排列的个数是多少。xry111说不就是n!么,然而fpcsong说你个SB,这些数有好多重复的。于是xry111就傻眼了,快帮帮他吧。

fpcsong讨厌高精度,所以如果答案超过了1018,就输出“Look, shability!”。

输入

多组数据(最多100组)。

每组数据,第1行,一个整数n。之后1行,包含n个整数a1, a2, ..., an,用空格分割。

对于90%的数据,有0<n≤100。
对于100%的数据,有0<n≤106,0≤ai≤1000。

注意:输入文件较大,请使用较快的IO。

输出

对于每组数据输出1行,若答案不超过1018,输出答案,否则输出“Look, shability!”。

样例输入

4
0 0 0 1
20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
20
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

样例输出

4
Look, shability!
1
 #include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const LL p=1e18;
int a[],n;
int gcd (int a,int b) {
return !b?a:gcd(b,a%b);
}
LL C (int n,int m) {
if (n-m<m) m=n-m;
LL sum=; int k=;
for (int i=n-m+;i<=n;i++,k++) {
int d=gcd (i,k);
int t1=i/d; int t2=k/d;
LL x=sum/(LL)t2; sum=x*(LL)t1;
if (sum<=||sum>p||p/x<t1) return ;
}
return sum;
}
int main ()
{
while (~scanf ("%d",&n)) {
memset (a,,sizeof(a)); int _max=;
for (int i=;i<=n;i++) {
int x; scanf ("%d",&x);
a[x]++; _max=max (_max,x);
}
int x=n; LL ans=; bool flag=;
for (int i=;i<=_max;i++) {
if (a[i]) {
LL t1=ans;
LL t2=C (x,a[i]);
ans*=t2;
if (ans<=||ans>p||p/t1<t2) { flag=; break;}
x-=a[i];
}
}
if (!flag) printf ("Look, shability!\n");
else printf ("%lld\n",ans);
}
return ;
}

!!永远记住代码不重要,思想最重要。。。

最新文章

  1. HTML5知识初级题目
  2. ununtu设置开机启动服务-手工将Tomcat设为自启动服务
  3. vue的transition过渡效果
  4. 使用VMware Workstation 12.5.2新建虚拟机
  5. JS添加MD5,JS提示框
  6. BZOJ1443: [JSOI2009]游戏Game
  7. oracle 拼接一张表所有字段
  8. log4js
  9. 利用sql批量删除表,存储过程
  10. C++进制转换(十进制转二进制、八进制、随意进制)
  11. 使用 C# 对文件进行压缩和解压
  12. JAVA JDK1.5-1.9新特性
  13. 素数与素性测试(Miller-Rabin测试)
  14. 关于如何解决谷歌Chrome浏览器空白页的问题
  15. 安装webstrom,免激活长久使用
  16. Jdk1.6 JUC源码解析(12)-ArrayBlockingQueue
  17. SQL Server统计信息偏差影响表联结方式案例浅析
  18. python3 摘抄
  19. 涨姿势:Spring Boot 2.x 启动全过程源码分析
  20. CS1704问题汇总

热门文章

  1. maven运行时的配置及命令详解
  2. weex npm 报错 cb() never called!
  3. Nginx的Access日志记录的时机
  4. laravel中对模型和路由做缓存,提高性能
  5. spark使用正则表达式读入多个文件
  6. 适应c++ 新特性 - 与我 - 多年传统方式开发(新特性参考微软标准:https://msdn.microsoft.com/zh-cn/library/hh279654.aspx)
  7. js 图片延时加载
  8. 深入研究sqlalchemy连接池
  9. MATLAB图片折腾3
  10. Spring Data JPA中的动态查询 时间日期