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

[Daimayuan] 三段式(C++,數(shù)組前綴和)

這篇具有很好參考價值的文章主要介紹了[Daimayuan] 三段式(C++,數(shù)組前綴和)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

有一個長度為 n n n的序列,現(xiàn)在我們想把它切割成三段(每一段都是連續(xù)的),使得每一段的元素總和都相同,請問有多少種不同的切割方法

輸入描述

第一行給出一個數(shù) n n n,( 1 ≤ n ≤ 1 0 5 1≤n≤10^5 1n105)

第二行給出序列 a 1 a_1 a1?, a 2 a_2 a2? a 3 a_3 a3?,…, a n a_n an?,( ∣ a i ∣ ≤ 1 0 5 |a_i|≤10^5 ai?105)

輸出描述

輸出一個數(shù)表示有多少種不同的切割方法

樣例輸入
4
1 2 3 3
樣例輸出
1
樣例解釋

可以將它分成第一組 1 1 1, 2 2 2,第二組 3 3 3,第三組 3 3 3

解題思路

根據(jù)題意,很容易得到下面的公式:
s u m 1 + s u m 2 + s u m 3 = s u m s u m 1 = s u m 2 = s u m 3 s u m 1 = s u m 2 = s u m 3 = 1 3 s u m sum_1+sum_2+sum_3=sum\\ sum_1=sum_2=sum_3\\ \\ sum_1=sum_2=sum_3=\frac{1}{3}sum sum1?+sum2?+sum3?=sumsum1?=sum2?=sum3?sum1?=sum2?=sum3?=31?sum
要滿足題意有兩個前提條件(特殊判定):

(1) s u m ? % ? 3 = = 0 sum\ \%\ 3==0 sum?%?3==0;

(2) n ≥ 3 n\ge3 n3

if (n < 3 || sum % 3 != 0) {
    cout << 0 << endl;
    return 0;
}

然后我們來尋找可能的分割方式。

如果有多于 1 1 1種的分割方法,那么一定存在子段和為 0 0 0。

與其去找子段和為 0 0 0的部分,不如轉(zhuǎn)化思維,使用前綴和的概念(經(jīng)常用于連續(xù)區(qū)間和問題)。

這樣我們就只需要尋找前綴和同為 1 3 s u m \frac13sum 31?sum的部分了。

然后具體問題具體分析,因為題目中只要求分割為三段,所以我們直接找出前后兩段 1 3 s u m \frac13sum 31?sum即可。

注意,至少要為中間的 1 3 s u m \frac13sum 31?sum預(yù)留一個元素的位置。

long long ans = 0;
for (int i = 1; i <= n - 1; i++) {
	if (pre[i] == subsum) {
		ans += tail_counter[i + 2];
	}
}

其中tail_counter中的元素意義為: i i i位置及其之后有多少個后綴和為 1 3 s u m \frac13sum 31?sum。

最后,AC代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-452101.html

#include <iostream>
using namespace std;
const int max_n = 1e5;

long long arr[max_n + 1], pre[max_n + 1], tail[max_n + 2];
long long tail_counter[max_n + 1];

int main() {
	int n;
	long long sum = 0;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> arr[i];
		sum += arr[i];
	}

	if (n < 3 || sum % 3 != 0) {
		cout << 0 << endl;
		return 0;
	}
	long long subsum = sum / 3;
	for (int i = 1; i <= n; i++) {
		pre[i] = arr[i] + pre[i - 1];
	}
	for (int i = n; i >= 1; i--) {
		tail[i] = arr[i] + tail[i + 1];
		tail_counter[i] = tail_counter[i + 1];
		if (tail[i] == subsum) tail_counter[i]++;
	}
	long long ans = 0;
	for (int i = 1; i <= n - 1; i++) {
		if (pre[i] == subsum) {
			ans += tail_counter[i + 2];
		}
	}
	cout << ans << endl;
	return 0;
}

到了這里,關(guān)于[Daimayuan] 三段式(C++,數(shù)組前綴和)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Verilog基礎(chǔ):三段式狀態(tài)機與輸出寄存

    Verilog基礎(chǔ):三段式狀態(tài)機與輸出寄存

    相關(guān)閱讀 Verilog基礎(chǔ) https://blog.csdn.net/weixin_45791458/category_12263729.html ? ? ? ? 對于Verilog HDL而言,有限狀態(tài)機(FSM)是一種重要而強大的模塊,常見的有限狀態(tài)機書寫方式可以分為一段式,二段式和三段式,筆者強烈建議使用三段式因為這樣能使?fàn)顟B(tài)機邏輯清晰且易于維護。 ? ?

    2024年02月04日
    瀏覽(22)
  • 三段式電流保護與自動重合閘MATLAB仿真模型

    三段式電流保護與自動重合閘MATLAB仿真模型

    微 ? 關(guān)注“電氣仔推送”獲得資料(專享優(yōu)惠) 前加速、后加速的區(qū)別: 前加速是保護裝置不判別是永久性故障還是瞬時故障,直接跳閘,然后經(jīng)重合閘裝置來糾正;后加速是保護裝置是先判別故障類型有選擇性跳閘 以下只敘述后加速的相關(guān)內(nèi)容,前加速不在贅述!??!

    2024年02月02日
    瀏覽(22)
  • 【附源碼】基于fpga的自動售貨機(三段式狀態(tài)機)

    【附源碼】基于fpga的自動售貨機(三段式狀態(tài)機)

    目錄 1、VL38?自動販?zhǔn)蹤C1 題目介紹 思路分析 代碼實現(xiàn) 仿真文件 2、VL39?自動販?zhǔn)蹤C2 題目介紹: 題目分析 代碼實現(xiàn) 仿真文件 3、狀態(tài)機基本知識 ????????設(shè)計一個自動販?zhǔn)蹤C,輸入貨幣有三種,為0.5/1/2元,飲料價格是1.5元,要求進行找零,找零只會支付0.5元。 ps: ??

    2024年02月01日
    瀏覽(18)
  • Verilog寫狀態(tài)機的三種描述方式之三段式

    狀態(tài)機的設(shè)計思路: 一是從狀態(tài)機變量入手,分析各個狀態(tài)的輸入、狀態(tài)轉(zhuǎn)移和輸出; 二是先確定電路的輸出關(guān)系,再回溯規(guī)劃每個狀態(tài)的條件、輸入等; 狀態(tài)機的三要素是狀態(tài)、輸入和輸出 , 根據(jù)狀態(tài)機狀態(tài)是否和輸入條件相關(guān),可以分為Moore型狀態(tài)機(與輸入無關(guān))和

    2024年02月14日
    瀏覽(33)
  • 【零基礎(chǔ)玩轉(zhuǎn)BLDC系列】無刷直流電機無位置傳感器三段式啟動法詳細(xì)介紹及代碼分享

    無刷直流電動機基本轉(zhuǎn)動原理等內(nèi)容請參考《基于霍爾傳感器的無刷直流電機控制原理》、《基于反電動勢過零檢測法的無刷直流電機控制原理》與《以GD32F30x為例定時器相關(guān)功能詳解》,BLDC基本原理及基礎(chǔ)知識本篇不再贅述。 直流無刷電機由于定子繞組的反電動勢與電機的

    2023年04月08日
    瀏覽(30)
  • 【力扣】1588. 所有奇數(shù)長度子數(shù)組的和 <前綴和>

    給你一個正整數(shù)數(shù)組 arr ,請你計算所有可能的奇數(shù)長度子數(shù)組的和。子數(shù)組 定義為原數(shù)組中的一個連續(xù)子序列。請你返回 arr 中 所有奇數(shù)長度子數(shù)組的和 。 示例 1: 輸入:arr = [1,4,2,5,3] 輸出:58 解釋:所有奇數(shù)長度子數(shù)組和它們的和為: [1] = 1 [4] = 4 [2] = 2 [5] = 5 [3] = 3 [1

    2024年02月10日
    瀏覽(20)
  • 前綴和+單調(diào)雙隊列+貪心:LeetCode2945:找到最大非遞減數(shù)組的長度

    前綴和+單調(diào)雙隊列+貪心:LeetCode2945:找到最大非遞減數(shù)組的長度

    C++算法:前綴和、前綴乘積、前綴異或的原理、源碼及測試用例 包括課程視頻 單調(diào)雙隊列 貪心 給你一個下標(biāo)從 0 開始的整數(shù)數(shù)組 nums 。 你可以執(zhí)行任意次操作。每次操作中,你需要選擇一個 子數(shù)組 ,并將這個子數(shù)組用它所包含元素的 和 替換。比方說,給定數(shù)組是 [1,3,

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

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

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

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

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

    2024年02月07日
    瀏覽(16)
  • C++前綴和算法:生成數(shù)組原理、源碼及測試用例

    C++前綴和算法:生成數(shù)組原理、源碼及測試用例

    C++算法:前綴和、前綴乘積、前綴異或的原理、源碼及測試用例 包括課程視頻 動態(tài)規(guī)劃,日后完成。 給定三個整數(shù) n、m 和 k 。考慮使用下圖描述的算法找出正整數(shù)數(shù)組中最大的元素。 請你構(gòu)建一個具有以下屬性的數(shù)組 arr : arr 中包含確切的 n 個整數(shù)。 1 = arr[i] = m 其中 (

    2024年02月06日
    瀏覽(13)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包