xdoj-1106(判断组合数是否溢出)
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 ;
}
!!永远记住代码不重要,思想最重要。。。
xdoj-1106(判断组合数是否溢出)的更多相关文章
- 判断文本是否溢出/hover显示全部
前言 在工作中我们经常会遇到,文字过多,需要用省略号,并且鼠标hover的时候 还需要 显示全部的文字的需求. 正文 文字过多需要用省略号的实现:上代码啦 .ellipsis { width: 100 ...
- Python解释器判断整数相加溢出
溢出,则和的最高位(即符号位)与两个加数都不相同,例如 1)非负数+非负数=负数 2)负数+负数=非负数 那么,假设x为a与b的和,((a^b)>=0 && (x^a)<0 ...
- js判断文本是否溢出容器
onShowNameTipsMouseenter: function(e) { var target = e.target; var containerLength = $(target).width ...
- jQuery关于文字内容溢出用点点点(…)省略号表示
1.jQuery限制字符字数的方法代码很简单,使用也很方便,如下: $(document).ready(function(){//限制字符个数$(“.zxx_text_overflow”).each( ...
- C#使用checked关键字处理"溢出"错误
代码如下: private void btnCalculate_Click(object sender, EventArgs e) { byte num1, num2;//定义两个byte变量 if( ...
- css单行文本及多行文本溢出显示省略号
关于文本溢出的相关属性: 1. text-overflow: clip|ellipsis|string; 该属性规定当文本溢出包含元素时发生的事情. clip : 修剪文本. ellipsis : ...
- datagrid 文本溢出时候 鼠标经过出现提示信息tooltip
1只有文本溢出的单元格鼠标经过才显示提示信息 $('.datagrid-cell').mouseover(function () { if (this.offsetWidth < this.sc ...
- 【PAT甲级】1065 A+B and C (64bit) (20 分)(大数溢出)
题意: 输入三个整数A,B,C(long long范围内),输出是否A+B>C. trick: 测试点2包括溢出的数据,判断一下是否溢出即可. AAAAAccepted code: #defin ...
- Leetcode分类刷题答案&心得
Array 448.找出数组中所有消失的数 要求:整型数组取值为 1 ≤ a[i] ≤ n,n是数组大小,一些元素重复出现,找出[1,n]中没出现的数,实现时时间复杂度为O(n),并不占额外空间 思路 ...
随机推荐
- cmp的值到底是0还是1还是-1的问题
返回值不局限于这三个数返回负数,表示第一个参数小于第二个参数返回整数,表示第一个参数大于第二个参数返回0,表示他们相等
- android studio 安装步骤
1◆ jdk环境安装 2◆ android文件下载 3◆ 安装步骤 waiting --- 4◆ 配置 正在安装加速器····· google setProxy https:/ ...
- ubuntu下修改MYSQL数据库密码
在介绍修改密码之前,先介绍一个文件/etc/MySQL/debian.cnf.其主要内容如下图: 里面有一个debian-sys-maint用户,这个用户只有Debian或Ubuntu服务器才有,所以 ...
- 7.3 C++模板中的函数式参数
参考:http://www.weixueyuan.net/view/6400.html 总结: 模板类至少有一个类参数,但是可以有多个参数,这些参数中可以存在非类类型的参数. 类参数是指 class ...
- 组队项目——黄金点(叶雨&王浩)
代码来源:自己编写 运行环境:win10 编译软件:VC++6.0 使用语言:C语言 功能:可多次运行,由用户决定退出与否,可以记录玩家的姓名与分数并显示. BUG:暂未发现 GitHub地址:htt ...
- HTML5中input[type='date']自定义样式
HTML5提供了日历控件功能,缩减了开发时间,但有时它的样式确实不如人意,我们可以根据下面的代码自行修改. 建议:复制下面的代码段,单独建立一个css文件,方便我们修改. /* 修改日历控件类型 */ ...
- centos6.6安装hadoop-2.5.0(三、完全分布式安装)
操作系统:centos6.6(三台服务器) 环境:selinux disabled:iptables off:java 1.8.0_131 安装包:hadoop-2.5.0.tar.gz hadoop ...
- C++中的break,continue和return语句小结
1.break语句能用在switch,while,do...while和for语句中:continue语句用在while,do...while和for语句中. 2.break结束语句执行,并将程序的执 ...
- IOS内置safari浏览器日期字符串转Date对象失败
代码示例: <html> <head> <title>Date字符串转化示例</title> </head> <body> &l ...
- The databse returned no natively generated identity value问题
com.cqupt.dayday.model 代码 package com.cqupt.dayday.model; import java.util.Date; /** * Created by I ...