pid=4873"style="">題目鏈接題意:d維的。長(zhǎng)度為n的塊中,每次選d條平行于各條軸的線段,假設(shè)有兩兩相交則點(diǎn)數(shù)加1,問(wèn)每次得到點(diǎn)數(shù)的期望是多少思路:自己推還是差一些,轉(zhuǎn)篇官方題接把,感覺(jué)自己想的沒(méi)想到把分子那項(xiàng)拆分成幾個(gè)多項(xiàng)式的和,然后能夠轉(zhuǎn)化為公式求解。Multi-UniversityTrainingContest2--by鎮(zhèn)海中學(xué)" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

HDU 4873 ZCC Loves Intersection(可能性)

系統(tǒng) 2481 0

HDU 4873 ZCC Loves Intersection

題目鏈接

題意:d維的。長(zhǎng)度為n的塊中,每次選d條平行于各條軸的線段,假設(shè)有兩兩相交則點(diǎn)數(shù)加1,問(wèn)每次得到點(diǎn)數(shù)的期望是多少

思路:自己推還是差一些,轉(zhuǎn)篇官方題接把,感覺(jué)自己想的沒(méi)想到把分子那項(xiàng)拆分成幾個(gè)多項(xiàng)式的和,然后能夠轉(zhuǎn)化為公式求解。

2014?<wbr>Multi-University?<wbr>Training?<wbr>Contest?<wbr>2--by?<wbr>鎮(zhèn)海中學(xué)?<wbr>解題報(bào)告

2014?<wbr>Multi-University?<wbr>Training?<wbr>Contest?<wbr>2--by?<wbr>鎮(zhèn)海中學(xué)?<wbr>解題報(bào)告

代碼:

      #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;
}
    


版權(quán)聲明:本文博客原創(chuàng)文章。博客,未經(jīng)同意,不得轉(zhuǎn)載。

HDU 4873 ZCC Loves Intersection(可能性)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 我和我的祖国电影在线观看免费版高清 | 香蕉久久久 | 男人电影天堂 | 欧美在线网站 | 国产美女高潮 | 夜夜嘿视频免费看 | 三级黄色片在线免费观看 | 亚洲国产精品一区二区第一页 | 欧美日韩免费在线观看视频 | 精品小视频在线 | 91精品国产综合久久婷婷香蕉 | www国产精 | 亚洲人成网站999久久久综合 | 日本大黄视频 | 欧美性猛交一区二区三区精品 | 免费A片线观看成人在-杏TV | 国产成人一区二区三区 | 成人伊人 | 精品欧美高清一区二区免费 | 青久久| 欧美成人免费看片一区 | 奇米影视四色中文字幕 | 高清国产一区二区三区四区五区 | 精品久久久久久久久久 | 婷婷久久爱www | 91在线播放视频 | 开心综合 | 欧美视频区 | 99riav视频一区二区 | 亚洲一区二区三区高清网 | 一级黄色大片视频 | 国产精品久久久久久久久免费 | 九九在线精品视频播放 | 免费毛片在线播放 | 在线看av的网址 | 91视频在线观看 | 日本精品三级 | 久久亚洲欧美日韩精品专区 | 在线精品自拍亚洲第一区 | 欧美一区二区三区久久综合 | 欧美性bbbbbxxxxxddd |