国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[Daimayuan] 異或和(C++,異或,數(shù)學(xué))

這篇具有很好參考價(jià)值的文章主要介紹了[Daimayuan] 異或和(C++,異或,數(shù)學(xué))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

給定一個(gè)長(zhǎng)度為 n n n 的數(shù)組 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1?,a2?,...,an?。 請(qǐng)你求出下面式子的模 1 e 9 + 7 1e9+7 1e9+7的值。

∑ i = 1 n ? 1 ∑ j = i + 1 n ( a i ? X O R ? a j ) \sum_{i=1}^{n-1}{\sum_{j=i+1}^{n}{(a_i\ XOR\ a_j)}} i=1n?1?j=i+1n?(ai??XOR?aj?)

輸入格式

第一行一個(gè)數(shù)字 n n n。

接下來(lái)一行 n n n 個(gè)整數(shù) a 1 , a 2 , … , a n a_1,a_2,…,a_n a1?,a2?,,an?

輸出格式

一行一個(gè)整數(shù)表示答案。

樣例輸入
3
1 2 3
樣例輸出
6
數(shù)據(jù)規(guī)模

所有數(shù)據(jù)保證 2 ≤ n ≤ 300000 , 0 ≤ a i < 2 60 2≤n≤300000,0≤a_i<2^{60} 2n300000,0ai?<260。

解題思路

依照題意,我們只能直接跑二重循環(huán)(因?yàn)?span id="n5n3t3z" class="katex--inline"> a i a_i ai? a j a_j aj?的組合不會(huì)重復(fù),也就是說(shuō)沒(méi)有子結(jié)構(gòu)的概念),這肯定會(huì) T L E TLE TLE。

那么我們考慮異或操作的性質(zhì):

異或操作是位操作,無(wú)視整個(gè)位串的意義,只能看到單個(gè)位。——條件(1)

然后重新審視 ∑ i = 1 n ? 1 ∑ j = i + 1 n ( a i ? X O R ? a j ) \sum_{i=1}^{n-1}{\sum_{j=i+1}^{n}{(a_i\ XOR\ a_j)}} i=1n?1?j=i+1n?(ai??XOR?aj?)。

這個(gè)式子就是對(duì)任意兩個(gè)元素進(jìn)行異或操作然后做和,也就是說(shuō)嘗試了所有的組合 C n 2 C_n^2 Cn2?)。——條件(2)

再來(lái)看一下異或操作的性質(zhì):同則為假,不同為真。——條件(3)

如何利用三個(gè)條件優(yōu)化算法?這里通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)理解:

有位串 10000111 1000 0111 10000111,我們對(duì)任意兩個(gè)位進(jìn)行異或操作,然后做和。很容易發(fā)現(xiàn),其和為 4 ? 4 = 16 4*4=16 4?4=16。就是 1 1 1的數(shù)量乘上 0 0 0的數(shù)量。

然后我們回去看一眼題中的例子:

	1	2	3
1	1	0	1 -> 2 * 1 = 2
2	0	1	1 -> 2 * 2 = 4
4	0	0	0 -> 0 * 4 = 0

比起之前那個(gè)簡(jiǎn)單的例子,也就是多了個(gè)權(quán)重,僅此而已。

接下來(lái)簡(jiǎn)單說(shuō)一下代碼如何實(shí)現(xiàn):

我們維護(hù)每一個(gè)位上 1 1 1(也可以是 0 0 0)出現(xiàn)的次數(shù);

然后遍歷每一個(gè)位,累計(jì): 0 0 0的數(shù)量 ? 1 *1 ?1的數(shù)量 ? * ?權(quán)重。

AC代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-429690.html

#include <iostream>
using namespace std;
const int max_len = 60;
const long long max_a = (1LL << 60LL) - 1LL;
const int max_n = 300000;
const long long mod_num = 1e9 + 7;

long long sum[max_len];

inline void read() {
	long long x, idx = 0;
	cin >> x;
	while (x) {
		sum[idx++] += x & 1;
		x >>= 1;
	}
}

int main() {
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) read();
	
	long long ans = 0;
	for (int i = 0; i < max_len; i++) {
		long long power = (1LL << (long long)(i)) % mod_num;
		long long comb = sum[i] * (n - sum[i]) % mod_num;
		ans = (ans + (power * comb) % mod_num) % mod_num;
	}
	cout << ans << endl;
	return 0;
}

到了這里,關(guān)于[Daimayuan] 異或和(C++,異或,數(shù)學(xué))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • CSDN每日一練 |『異或和』『生命進(jìn)化書(shū)』『熊孩子拜訪』2023-08-27

    時(shí)間限制:1000ms內(nèi)存限制:256M 題目描述: 小張找到了一個(gè)整數(shù) N,他想問(wèn)問(wèn)你從 1 到 N 的所有不同整數(shù)的異或和是多少, 請(qǐng)你回答他的問(wèn)題。 輸入描述: 第一行包含一個(gè)整數(shù) N (1 = N = 100000)。 輸出描述: 第一行輸出一個(gè)整數(shù), 代表從 1 到 N 的所有不同整數(shù)的異或和。 ??

    2024年02月11日
    瀏覽(154)
  • Codeforces Beta Round 15 C. Industrial Nim Nim,1~n的異或和

    Codeforces Beta Round 15 C. Industrial Nim Nim,1~n的異或和

    Problem - 15C - Codeforces 目錄 Nim游戲: 1~n的異或和: 代碼: n個(gè)石頭堆,誰(shuí)最后沒(méi)得取誰(shuí)敗 我用的異或思考法,對(duì)所有堆異或。 開(kāi)局異或和為0的敗 最后全是0,異或完也是0. //最后是0,這位就輸了 //A選手讓異或和為0,B選手必須動(dòng)一下,而他做任何操作都會(huì)使異或和不為0 //這

    2024年02月21日
    瀏覽(154)
  • 第十四屆藍(lán)橋杯省賽 C/C++ A 組 H 題——異或和之和(AC)

    給定一個(gè)數(shù)組 A i A_i A i ? ,分別求其每個(gè)子段的異或和,并求出它們的和?;蛘哒f(shuō),對(duì)于每組滿足 1 ≤ L ≤ R ≤ n 1 leq L leq R leq n 1 ≤ L ≤ R ≤ n 的 L , R L, R L , R ,求出數(shù)組中第 L L L 至第 R R R 個(gè)元素的異或和。然后輸出每組 L , R L, R L , R 得到的結(jié)果加起來(lái)的值。 輸入的第

    2024年02月13日
    瀏覽(89)
  • 前端算法題——給定一個(gè)整數(shù)數(shù)組,判斷是否存在重復(fù)元素。

    題目可以理解為如果存在一值在數(shù)組中出現(xiàn)至少兩次,函數(shù)返回 true 。如果數(shù)組中每個(gè)元素都不相同,則返回 false。 這題一看就是 計(jì)數(shù)問(wèn)題,題目中“如果存在一值在數(shù)組中出現(xiàn)至少兩次”這句話就告訴我們記錄每一個(gè)數(shù)字出現(xiàn)的次數(shù)就能解決問(wèn)題了。? 我們遍歷數(shù)組時(shí),

    2024年02月20日
    瀏覽(95)
  • 【LeetCode】每日一題&最后一個(gè)單詞的長(zhǎng)度&投票法求解多數(shù)元素&異或操作符巧解只出現(xiàn)一次的數(shù)字&整數(shù)反轉(zhuǎn)

    ========================================================================= 個(gè)人主頁(yè)直達(dá): 小白不是程序媛 LeetCode系列專(zhuān)欄: LeetCode刷題掉發(fā)記 ========================================================================= 目錄 LeetCode 58.最后一個(gè)單詞的長(zhǎng)度 LeetCode169.多數(shù)元素 LeetCode 136.出現(xiàn)一次的數(shù)字 LeetCode 7.整數(shù)

    2024年02月08日
    瀏覽(25)
  • 給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 target 的那兩個(gè)整數(shù),并返回它們的數(shù)組下標(biāo)。(哈希法)

    給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 target 的那兩個(gè)整數(shù),并返回它們的數(shù)組下標(biāo)。(哈希法)

    思路: 當(dāng)題意中需要判斷某個(gè)元素是否出現(xiàn)過(guò),或者某個(gè)元素是否在這個(gè)集合里出現(xiàn)過(guò)。 給定一個(gè)整數(shù)數(shù)組 nums?和一個(gè)整數(shù)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 target??的那兩個(gè)整數(shù),并返回它們的數(shù)組下標(biāo)。 你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案。但是,數(shù)組

    2024年02月08日
    瀏覽(97)
  • 【面試經(jīng)典 150 | 數(shù)組】最后一個(gè)單詞的長(zhǎng)度

    【面試經(jīng)典 150 | 數(shù)組】最后一個(gè)單詞的長(zhǎng)度

    本專(zhuān)欄專(zhuān)注于分析與講解【面試經(jīng)典150】算法,兩到三天更新一篇文章,歡迎催更…… 專(zhuān)欄內(nèi)容以分析題目為主,并附帶一些對(duì)于本題涉及到的數(shù)據(jù)結(jié)構(gòu)等內(nèi)容進(jìn)行回顧與總結(jié),文章結(jié)構(gòu)大致如下,部分內(nèi)容會(huì)有增刪: Tag:介紹本題牽涉到的知識(shí)點(diǎn)、數(shù)據(jù)結(jié)構(gòu); 題目來(lái)源:

    2024年04月22日
    瀏覽(27)
  • C++中變量作為數(shù)組長(zhǎng)度

    在 C + + C++ C + + 中無(wú)法使用變量作為數(shù)組長(zhǎng)度,必須使用常量 因?yàn)閿?shù)組空間分配在棧內(nèi)存中,這部分空間大小必須在編譯時(shí)就確定,不能等到運(yùn)行時(shí)再分配,而常量值編譯時(shí)就確定,變量須運(yùn)行時(shí)才能確定 因此,想要使用變量聲明數(shù)組長(zhǎng)度,可以選擇將數(shù)組空間開(kāi)辟在堆內(nèi)存

    2024年02月07日
    瀏覽(16)
  • Java創(chuàng)建一個(gè)長(zhǎng)度為10的數(shù)組,利用Arrays.sort(), 為數(shù)組元素排序

    Java創(chuàng)建一個(gè)長(zhǎng)度為10的數(shù)組,利用Arrays.sort(), 為數(shù)組元素排序

    程序要求:1)創(chuàng)建一個(gè)整型數(shù)組,數(shù)組的長(zhǎng)度為10. ? ??????????????????2)給數(shù)組元素賦值,要求亂序。 ? ? ? ? ? ? ? ? ? 3)利用fori循環(huán)將數(shù)組元素依次輸出。 ?? ? ? ? ? ? ? ? ? ? 4)利用Arrays.sort(), 為數(shù)組元素排序 ? ? ? ? ? ? ? ? ? 5)采用增加for循環(huán)將

    2024年02月08日
    瀏覽(30)
  • 兩種解法解決LCR 008. 長(zhǎng)度最小的子數(shù)組【C++】

    兩種解法解決LCR 008. 長(zhǎng)度最小的子數(shù)組【C++】

    ?? 創(chuàng)作不易,你的點(diǎn)贊和關(guān)注都是對(duì)我莫大的鼓勵(lì),再次感謝您的觀看??

    2024年02月07日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包