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

第十四屆藍(lán)橋杯省賽 C/C++ A 組 H 題——異或和之和(AC)

這篇具有很好參考價(jià)值的文章主要介紹了第十四屆藍(lán)橋杯省賽 C/C++ A 組 H 題——異或和之和(AC)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 異或和之和

1.題目描述

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

2.輸入格式

輸入的第一行包含一個(gè)整數(shù) n n n。

第二行包含 n n n 個(gè)整數(shù) A i A_i Ai?,相鄰整數(shù)之間使用一個(gè)空格分隔。

3.輸出格式

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

4.樣例輸入

5
1 2 3 4 5

5.樣例輸出

39

6. 數(shù)據(jù)范圍

對(duì)于 30 % 30\% 30% 的評(píng)測(cè)用例, n ≤ 300 n \leq 300 n300

對(duì)于 60 % 60\% 60% 的評(píng)測(cè)用例, n ≤ 5000 n \leq 5000 n5000;

對(duì)于所有評(píng)測(cè)用例, 1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1n105 0 ≤ A i ≤ 2 20 0 \leq A_i \leq 2^{20} 0Ai?220。

7. 原題鏈接

異或和之和

2. 解題思路

首先,根據(jù)題意進(jìn)行暴力枚舉每個(gè)子區(qū)間 [ l , r ] [l,r] [l,r] ( 1 ≤ l ≤ r ≤ n ) (1\leq l \leq r \leq n) (1lrn) 的異或和,復(fù)雜度將是 O ( n 2 ) O(n^2) O(n2),無(wú)法通過(guò)本題,但可以拿到一定分?jǐn)?shù)。

因?yàn)樯婕爱惢蜻\(yùn)算且觀察到 a i a_i ai? 的取值范圍為 [ 0 , 2 20 ] [0,2^{20}] [0,220],我們不難想到從"拆位"的角度去思考問(wèn)題。假設(shè)對(duì)于二進(jìn)制位的第 i ∈ [ 0 , 20 ] i \in[0,20] i[0,20] 位,數(shù)組中一共有 x x x 個(gè)子區(qū)間在該位的異或和為 1 1 1,那么該位對(duì)答案的貢獻(xiàn)為 2 i × x 2^{i} \times x 2i×x。這樣我們就將整個(gè)大問(wèn)題,拆成了 20 20 20 個(gè)子問(wèn)題,原數(shù)組相當(dāng)于被我們拆分為 20 20 20 個(gè) 01 01 01 數(shù)組。

對(duì)于每個(gè)子問(wèn)題,也就是對(duì)于每個(gè) 01 01 01 數(shù)組,我們需要求出有多少子數(shù)組的異或和為 1 1 1,也就是求出前面所說(shuō)的 x x x。這個(gè)問(wèn)題我們可以通過(guò)前綴異或來(lái)解決。設(shè)這里的 01 01 01 數(shù)組為 a a a 數(shù)組,我們?cè)僭O(shè)一個(gè) S S S 數(shù)組, S i S_i Si? 表示 a a a 數(shù)組中前 i i i 個(gè)元素的異或和為多少。根據(jù)異或運(yùn)算的性質(zhì):

a i ⊕ a i + 1 ⊕ ? ⊕ a j ? 1 ⊕ a j = ( a 1 ⊕ a 2 ⊕ ? a j ) ⊕ ( a 1 ⊕ a 2 ⊕ ? ⊕ a i ? 1 ) a_i \oplus a_{i+1} \oplus \cdots \oplus a_{j-1} \oplus a_j=(a_1 \oplus a_2 \oplus \cdots a_j) \oplus (a_1 \oplus a_2 \oplus \cdots \oplus a_{i-1}) ai?ai+1??aj?1?aj?=(a1?a2??aj?)(a1?a2??ai?1?)

將上述式子用 S S S 進(jìn)行代替有:

a i ⊕ a i + 1 ⊕ ? ⊕ a j ? 1 ⊕ a j = S i ? 1 ⊕ S j a_i \oplus a_{i+1} \oplus \cdots \oplus a_{j-1} \oplus a_j=S_{i-1} \oplus S_j ai?ai+1??aj?1?aj?=Si?1?Sj?

如果想使得等式左邊等于 1 1 1,即需要滿足 S i ? 1 ≠ S j S_{i-1} \ne S_j Si?1?=Sj?

根據(jù)上述分析,我們可以枚舉每個(gè) 01 01 01 數(shù)組的前綴異或數(shù)組 S S S,當(dāng)我們枚舉到 S j S_j Sj? 時(shí),我們只需要考慮在它之前有多少個(gè) S i S_i Si? 和它不同,不同的個(gè)數(shù)就等于以 a j a_j aj? 結(jié)尾且異或和為 1 1 1 的子數(shù)組個(gè)數(shù),這個(gè)統(tǒng)計(jì)個(gè)數(shù)的功能我們可以使用哈希表實(shí)現(xiàn)。

這樣我們可以在接近 O ( n ) O(n) O(n) 的復(fù)雜度統(tǒng)計(jì)出每個(gè) 01 01 01 數(shù)組子區(qū)間異或?yàn)? 1 1 1 的個(gè)數(shù),我們?cè)O(shè)第 i i i 個(gè)二進(jìn)制位的 01 01 01 數(shù)組子區(qū)間異或?yàn)? 1 1 1 的個(gè)數(shù)為 b i b_i bi?,最終答案為:

∑ i = 0 20 2 i × b i \sum_{i=0}^{20} 2^{i} \times b_i i=020?2i×bi?

時(shí)間復(fù)雜度: O ( 20 × n ) O(20 \times n) O(20×n)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-640318.html

3. AC_Code

  • C++
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010;

int n;
int a[N][25];
int main()
{
	ios_base :: sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		int x;
		cin >> x;
		for (int j = 0; j <= 20; ++j) {
			a[i][j] = (x >> j) & 1;
			a[i][j] ^= a[i - 1][j];
		}
	}
	LL ans = 0;
	for (int j = 0; j <= 20; ++j) {
		map<int, int> m;
		m[0]++;
		for (int i = 1; i <= n; ++i) {
			int x = m[a[i][j] ^ 1];
			ans += 1LL * (1 << j) * x;
			m[a[i][j]]++;
		}
	}
	cout << ans << '\n';
	return 0;
}
  • Java
import java.util.*;

public class Main {
    static final int N = 100010;

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int[][] a = new int[N][25];
        for (int i = 1; i <= n; ++i) {
            int x = scan.nextInt();
            for (int j = 0; j <= 20; ++j) {
                a[i][j] = (x >> j) & 1;
                a[i][j] ^= a[i - 1][j];
            }
        }
        long ans = 0;
        for (int j = 0; j <= 20; ++j) {
            Map<Integer, Integer> m = new HashMap<>();
            m.put(0, 1);
            for (int i = 1; i <= n; ++i) {
                int x = m.getOrDefault(a[i][j] ^ 1, 0);
                ans += (1L << j) * x;
                m.put(a[i][j], m.getOrDefault(a[i][j], 0) + 1);
            }
        }
        System.out.println(ans);
    }
}
  • Python
n = int(input())
N = 100010
a = [[0] * 25 for _ in range(N)]
b = list(map(int, input().split()))
for i in range(1, n + 1):
    x = b[i-1]
    for j in range(21, -1, -1):
        a[i][j] = (x >> j) & 1
        a[i][j] ^= a[i - 1][j]
ans = 0
for j in range(21, -1, -1):
    m = {0: 1}
    for i in range(1, n + 1):
        x = m.get(a[i][j] ^ 1, 0)
        ans += (1 << j) * x
        m[a[i][j]] = m.get(a[i][j], 0) + 1
print(ans)

到了這里,關(guān)于第十四屆藍(lán)橋杯省賽 C/C++ A 組 H 題——異或和之和(AC)的文章就介紹完了。如果您還想了解更多內(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)文章

  • 第十四屆藍(lán)橋杯省賽 Python B 組 D 題——管道(AC)

    有一根長(zhǎng)度為 len text{len} len 的橫向的管道,該管道按照單位長(zhǎng)度分為 len text{len} len 段,每一段的中央有一個(gè)可開(kāi)關(guān)的閥門和一個(gè)檢測(cè)水流的傳感器。 一開(kāi)始管道是空的,位于 L i L_i L i ? 的閥門會(huì)在 S i S_i S i ? 時(shí)刻打開(kāi),并不斷讓水流入管道。 對(duì)于位于 L i L_i L i ? 的閥

    2024年02月07日
    瀏覽(24)
  • 第十四屆藍(lán)橋杯省賽JavaB組試題E【蝸?!總€(gè)人題解Dijkstra堆優(yōu)化

    第十四屆藍(lán)橋杯省賽JavaB組試題E【蝸牛】個(gè)人題解Dijkstra堆優(yōu)化

    ??????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????? 第十四屆藍(lán)橋杯省賽JavaB組試題E【蝸?!緿ijkstra堆

    2023年04月15日
    瀏覽(28)
  • 第十三屆藍(lán)橋杯省賽與國(guó)賽真題題解大匯總(十四屆參賽者必備)

    ??大家好,我是執(zhí)梗。本文匯總了我寫(xiě)的第十三屆藍(lán)橋杯所有省賽真題與國(guó)賽真題,會(huì)針對(duì)每道題打出我自己的難度評(píng)星??,也會(huì)給出每道題的算法標(biāo)簽,幫助大家更有針對(duì)性的去學(xué)習(xí)和準(zhǔn)備,當(dāng)然許多題目由于難度或時(shí)間的原因暫未更新,如果有不懂的問(wèn)題也可以在評(píng)

    2024年02月11日
    瀏覽(37)
  • 第十四屆藍(lán)橋杯省賽JavaB組試題E【蝸?!緿ijkstra堆優(yōu)化 or 線性DP?

    第十四屆藍(lán)橋杯省賽JavaB組試題E【蝸?!緿ijkstra堆優(yōu)化 or 線性DP?

    ??????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????? 第十四屆藍(lán)橋杯省賽JavaB組試題E【蝸?!緿ijkstra堆

    2024年02月01日
    瀏覽(22)
  • 十四屆藍(lán)橋杯省賽CB

    十四屆藍(lán)橋杯省賽CB

    寫(xiě)的時(shí)候沒(méi)跑出來(lái),僅僅是因?yàn)榻o (i*i) 加了括號(hào),爆了int?。?! 雙精度浮點(diǎn)的表示范圍:-1.79E+308 ~ +1.79E+308 基本類型:int 二進(jìn)制位數(shù):32(4字節(jié)) 最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方) 最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1 double范圍很大,基本不可能爆,不

    2024年02月08日
    瀏覽(20)
  • 2023年第十四屆藍(lán)橋杯省賽Java C組題解

    只做出來(lái)(ACDFGH),挑幾個(gè)出來(lái),答案不一定正確,但自己測(cè)試通過(guò)了 求1~20230408的和 這里就直接套等差數(shù)列的求和公式,答案:204634714038436 ? 【問(wèn)題描述】 ????????有一個(gè)長(zhǎng)度為n的數(shù)組(n是10的倍數(shù)),每個(gè)數(shù) Ai 都是區(qū)間[0,9]中的整數(shù),小明發(fā)現(xiàn)數(shù)組里每種數(shù)出現(xiàn)的次數(shù)不太

    2023年04月26日
    瀏覽(32)
  • 第十四屆藍(lán)橋杯Python B組省賽復(fù)盤(pán)

    第十四屆藍(lán)橋杯Python B組省賽復(fù)盤(pán)

    【問(wèn)題描述】(5 分) 請(qǐng)求出在 12345678 至 98765432 中,有多少個(gè)數(shù)中完全不包含 2023 。 完全不包含 2023 是指無(wú)論將這個(gè)數(shù)的哪些數(shù)位移除都不能得到 2023 。 例如 20322175,33220022 都完全不包含 2023,而 20230415,20193213 則 含有 2023 (后者取第 1, 2, 6, 8 個(gè)數(shù)位) 。 【思路】 正則表達(dá)

    2024年02月02日
    瀏覽(20)
  • 藍(lán)橋杯嵌入式第十四屆省賽題目解析

    藍(lán)橋杯嵌入式第十四屆省賽題目解析

    前幾天剛剛參加完第十四屆的省賽,這屆題目比我想象中的要難,其實(shí)想一想這也是應(yīng)該的,以前的知識(shí)點(diǎn)都被摸透了,也是需要加入新的知識(shí)點(diǎn)了,但是我還是想說(shuō)能不能別在我參加的時(shí)候加大題目難度啊。 不過(guò)聽(tīng)說(shuō)隔壁單片機(jī)的省賽都比往年的國(guó)賽還難,這就有點(diǎn)離譜了

    2024年02月06日
    瀏覽(102)
  • 第十四屆藍(lán)橋杯大賽軟件賽省賽JavaB組解析

    第十四屆藍(lán)橋杯大賽軟件賽省賽JavaB組解析

    目錄 說(shuō)在前面 試題 A: 階乘求和 代碼: 題目分析: 試題 B: 幸運(yùn)數(shù)字 代碼: 題目分析: 試題 D: 矩形總面積 代碼: 題目分析: 試題 G: 買二贈(zèng)一 代碼: 題目分析: 試題 H: 合并石子 代碼: 題目思路: 說(shuō)在最后 比賽結(jié)束啦,可能這是本科生涯的最后一次藍(lán)橋杯啦!賽前也

    2023年04月11日
    瀏覽(23)
  • 藍(lán)橋杯單片機(jī)第十四屆省賽題目和程序答案

    藍(lán)橋杯單片機(jī)第十四屆省賽題目和程序答案

    目錄 ?1、前言 ?2、題目 3、程序架構(gòu)? ? ?3.1 display.c ? ?3.2 ds1302.c ? ?3.3 iic.c ? ?3.4 onewire.c ? ?3.5 main.c 主函數(shù)文件 ? ?3.6 環(huán)境配置 4. 歷年藍(lán)橋杯單片機(jī)試題和答案 ? ? ? ?抽空復(fù)習(xí)了一下,拿下單片機(jī)省賽一等獎(jiǎng),在此分享一下最新的14屆省賽程序設(shè)計(jì)答案 ? ? ? ? ?模

    2024年02月06日
    瀏覽(817)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包