HDU 4873 ZCC Loves Intersection(可能性)
HDU 4873 ZCC Loves Intersection
pid=4873" target="_blank" style="">题目链接
题意:d维的。长度为n的块中,每次选d条平行于各条轴的线段,假设有两两相交则点数加1,问每次得到点数的期望是多少
思路:自己推还是差一些,转篇官方题接把,感觉自己想的没想到把分子那项拆分成几个多项式的和,然后能够转化为公式求解。
代码:
#include <cstdio>
#include <cstring>
#include <cmath> const int MAXN = 10005; struct bign {
int len, num[MAXN]; bign () {
len = 0;
memset(num, 0, sizeof(num));
}
bign (int number) {*this = number;}
bign (const char* number) {*this = number;} void DelZero ();
void Put (); void operator = (int number);
void operator = (char* number); bool operator < (const bign& b) const;
bool operator > (const bign& b) const { return b < *this; }
bool operator <= (const bign& b) const { return !(b < *this); }
bool operator >= (const bign& b) const { return !(*this < b); }
bool operator != (const bign& b) const { return b < *this || *this < b;}
bool operator == (const bign& b) const { return !(b != *this); } void operator ++ ();
void operator -- ();
bign operator + (const int& b);
bign operator + (const bign& b);
bign operator - (const int& b);
bign operator - (const bign& b);
bign operator * (const int& b);
bign operator * (const bign& b);
bign operator / (const int& b);
//bign operator / (const bign& b);
int operator % (const int& b);
};
/***************************************************/ const int N = 10005;
long long n, d, prime[N], cnt[N];
int pn = 0, vis[N];
bign zi, mu; void table() {
for (long long i = 2; i < N; i++) {
prime[pn++] = i;
for (long long j = i * i; j < N; j += i)
vis[j] = 1;
}
} bign qpow(long long x, long long k) {
bign ans = 1;
bign tmp = x;
while (k) {
if (k&1) ans = ans * tmp;
tmp = tmp * tmp;
k >>= 1;
}
return ans;
} void solve(long long num, long long val) {
for (int i = 0; i < pn && prime[i] <= num; i++) {
while (num % prime[i] == 0) {
cnt[i] += val;
num /= prime[i];
}
}
if (num != 1) {
if (val > 0)
zi = zi * qpow(num, val);
else if (val < 0)
mu = mu * qpow(num, (-val));
}
} int main() {
table();
while (~scanf("%lld%lld", &n, &d)) {
zi = 1, mu = 1;
memset(cnt, 0, sizeof(cnt));
solve(d * (d - 1) / 2, 1);
solve(n + 4, 2);
solve(3, -2);
solve(n, -d);
for (int i = 0; i < pn; i++) {
if (cnt[i] > 0)
zi = zi * qpow(prime[i], cnt[i]);
else if (cnt[i] < 0)
mu = mu * qpow(prime[i], (-cnt[i]));
}
zi.Put();
if (mu != 1) {
printf("/");
mu.Put();
}
printf("\n");
}
return 0;
} /*********************************************/
void bign::DelZero () {
while (len && num[len-1] == 0)
len--; if (len == 0) {
num[len++] = 0;
}
} void bign::Put () {
for (int i = len-1; i >= 0; i--)
printf("%d", num[i]);
} void bign::operator = (char* number) {
len = strlen (number);
for (int i = 0; i < len; i++)
num[i] = number[len-i-1] - '0'; DelZero ();
} void bign::operator = (int number) { len = 0;
while (number) {
num[len++] = number%10;
number /= 10;
} DelZero ();
} bool bign::operator < (const bign& b) const {
if (len != b.len)
return len < b.len;
for (int i = len-1; i >= 0; i--)
if (num[i] != b.num[i])
return num[i] < b.num[i];
return false;
} void bign::operator ++ () {
int s = 1; for (int i = 0; i < len; i++) {
s = s + num[i];
num[i] = s % 10;
s /= 10;
if (!s) break;
} while (s) {
num[len++] = s%10;
s /= 10;
}
} void bign::operator -- () {
if (num[0] == 0 && len == 1) return; int s = -1;
for (int i = 0; i < len; i++) {
s = s + num[i];
num[i] = (s + 10) % 10;
if (s >= 0) break;
}
DelZero ();
} bign bign::operator + (const int& b) {
bign a = b;
return *this + a;
} bign bign::operator + (const bign& b) {
int bignSum = 0;
bign ans; for (int i = 0; i < len || i < b.len; i++) {
if (i < len) bignSum += num[i];
if (i < b.len) bignSum += b.num[i]; ans.num[ans.len++] = bignSum % 10;
bignSum /= 10;
} while (bignSum) {
ans.num[ans.len++] = bignSum % 10;
bignSum /= 10;
} return ans;
} bign bign::operator - (const int& b) {
bign a = b;
return *this - a;
} bign bign::operator - (const bign& b) {
int bignSub = 0;
bign ans;
for (int i = 0; i < len || i < b.len; i++) {
bignSub += num[i];
bignSub -= b.num[i];
ans.num[ans.len++] = (bignSub + 10) % 10;
if (bignSub < 0) bignSub = -1;
}
ans.DelZero ();
return ans;
} bign bign::operator * (const int& b) {
long long bignSum = 0;
bign ans; ans.len = len;
for (int i = 0; i < len; i++) {
bignSum += (long long)num[i] * b;
ans.num[i] = bignSum % 10;
bignSum /= 10;
} while (bignSum) {
ans.num[ans.len++] = bignSum % 10;
bignSum /= 10;
} return ans;
} bign bign::operator * (const bign& b) {
bign ans;
ans.len = 0; for (int i = 0; i < len; i++){
int bignSum = 0; for (int j = 0; j < b.len; j++){
bignSum += num[i] * b.num[j] + ans.num[i+j];
ans.num[i+j] = bignSum % 10;
bignSum /= 10;
}
ans.len = i + b.len; while (bignSum){
ans.num[ans.len++] = bignSum % 10;
bignSum /= 10;
}
}
return ans;
} bign bign::operator / (const int& b) { bign ans; int s = 0;
for (int i = len-1; i >= 0; i--) {
s = s * 10 + num[i];
ans.num[i] = s/b;
s %= b;
} ans.len = len;
ans.DelZero ();
return ans;
} int bign::operator % (const int& b) { bign ans; int s = 0;
for (int i = len-1; i >= 0; i--) {
s = s * 10 + num[i];
ans.num[i] = s/b;
s %= b;
} return s;
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
HDU 4873 ZCC Loves Intersection(可能性)的更多相关文章
- hdu 4873 ZCC Loves Intersection(大数+概率)
pid=4873" target="_blank" style="">题目链接:hdu 4873 ZCC Loves Intersection ...
- HDU 4873 ZCC Loves Intersection(JAVA、大数、推公式)
在一个D维空间,只有整点,点的每个维度的值是0~n-1 .现每秒生成D条线段,第i条线段与第i维度的轴平行.问D条线段的相交期望. 生成线段[a1,a2]的方法(假设该线段为第i条,即与第i维度的轴平 ...
- HDU 4876 ZCC loves cards(暴力剪枝)
HDU 4876 ZCC loves cards 题目链接 题意:给定一些卡片,每一个卡片上有数字,如今选k个卡片,绕成一个环,每次能够再这个环上连续选1 - k张卡片,得到他们的异或和的数,给定一个 ...
- hdu 4876 ZCC loves cards(暴力)
题目链接:hdu 4876 ZCC loves cards 题目大意:给出n,k,l,表示有n张牌,每张牌有值.选取当中k张排列成圈,然后在该圈上进行游戏,每次选取m(1≤m≤k)张连续的牌,取牌上值 ...
- hdu 4882 ZCC Loves Codefires(数学题+贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4882 ------------------------------------------------ ...
- HDU 4882 ZCC Loves Codefires (贪心)
ZCC Loves Codefires 题目链接: http://acm.hust.edu.cn/vjudge/contest/121349#problem/B Description Though ...
- HDU 4882 ZCC Loves Codefires(贪心)
ZCC Loves Codefires Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- hdu 5288 ZCC loves straight flush
传送门 ZCC loves straight flush Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K ...
- HDU 5228 ZCC loves straight flush( BestCoder Round #41)
题目链接:pid=5228">ZCC loves straight flush pid=5228">题面: pid=5228"> ZCC loves s ...
随机推荐
- 【Java收集的源代码分析】Hashtable源代码分析
Hashtable简单介绍 Hashtable相同是基于哈希表实现的,相同每一个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时.相同会自己主动增长. Has ...
- 读书时间《JavaScript高级程序设计》一:基础篇
第一次看了<JavaScript高级程序设计>第二版,那时见到手上的书,第一感觉真是好厚的一本书啊.现在再次回顾一下,看的是<JavaScript高级程序设计>第三版,并记录一 ...
- 【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象
为何将单例模式移除 在Cocos2d-JS v3.0之前.全部API差点儿都是从Cocos2d-x中移植过来的,这是Cocos2d生态圈统一性的重要一环.可惜的是,这样的统一性也在非常大程度上限制了C ...
- ramoops具体失败原因来解释驱动寄存器
正在使用linux的ramoops驱动器模块,当编译完成加载.查找驱动程序加载失败.显然,直接用内核代码,为什么会出现这种情况? 第一眼ramoops初始化代码: 180 static int __i ...
- Jsoup一个简短的引论——采用Java抓取网页数据
转载请注明出处:http://blog.csdn.net/allen315410/article/details/40115479 概述 jsoup 是一款Java 的HTML解析器,可直接解析某个U ...
- 多快好省的做个app开发
从技术经理的角度算一算,如何可以多快好省的做个app [导读]前端时间,一篇“从产品经理的角度算一算,做个app需要多少钱”的文章在网上疯传,可见大家对互联网创业的热情!这次,从一名技术经理的角度再给 ...
- android visible invisible和gone差异
android中UI应用的开发中常常会使用view.setVisibility()来设置控件的可见性.当中该函数有3个可选值.他们有着不同的含义: View.VISIBLE--->可见 View ...
- 解决因特网和xshell考虑到问题
首先需要解释.我们学校的网络是免费的.无论是实验室或宿舍.因此,互联网是基于Mac地址分配IP的,所以我VirtualBox安装了centos之后,话.就须要将VirtualBox的mac地址改成和我 ...
- bonecp使用数据源
bonecp.properties jdbc.driverClass=oracle.jdbc.driver.OracleDriver jdbc.jdbcUrl=jdbc:oracle:thin:@19 ...
- OSChina 的URL类的源代码重写过程
此代码是 oschina 到手柄形状像 http://www.oschina.net/p/tomcat 这种URL 此类已经废弃,改用 http://www.oschina.net/code/snip ...