2019牛客暑期多校訓練營(第三場) B題

2021-09-25 14:06:28 字數 1296 閱讀 7526

題意:給你乙個長度為n的01字串,問該字串中01個數相等的最長子串和子串行分別是多少。

分析:首先,大家要知道什麼是子串行,什麼是子串,子串行是不一定是連續的,它可以是原串中任意元素按照相對位置組成的序列,但是子串就不是了,子串一定是連續的,不可分割的按照絕對位置組成的序列。

知道這個概念之後,大家可以明顯的看出,子串行這個答案好求,就是暴力一下,看看這個字串中0,1的個數,誰最小,最後的答案就是這個最小值乘2;

那子串怎麼求,這是個難點。仔細觀察可以發現,這與01的對數是有一定的關係的,那麼不妨就從這個方面入手,我們定義乙個int變數dis,如果當前的字元是0,那麼dis–,否則dis++,如果這個dis是第一次出現,那麼就用乙個陣列存一下出現當前這個dis 的下標,如果說這個dis不是第一次出現,那麼就用當前這個字元的下標減去下標為dis這個陣列裡面的值。這就是答案。

為什麼呢,因為dis定義為出現0,就減一,出現1就加一,那麼當其值不是第一次出現的時候,那麼肯定就用當前這個下標減去第一次出現這個值的位置了;

這是因為0與1相互抵消才會產生的現象,只有他們出現的次數相等,才會出現抵消的情況。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

using namespace std;

const

int n=

1e5+

100;

char str[n]

;map<

int,

int>ma;

intmain()

int ans=0;

ma[0]

=0;for

(int i=

1;i<=n;i++

)printf

("%d %d\n"

,ans,

min(num_0,num_1)*2

);return0;

}

2019牛客暑期多校訓練營(第三場)

目錄 b crazy binary string 思維 d big integer 數論 f planting trees 思維 單調佇列 h magic line 計算幾何 j lru management 模擬 題意 計算最長的01子串和子串行,其中01數量相同。分析 對於子串那麼直接將0製成 ...

2019牛客暑期多校訓練營(第三場)F

這個學期終於結束了,暑假就要來了。然而,作為大學畢業要求的一部分,你必須在假期期間參加一些社會服務。最後,你決定加入乙個志願者團體,在山上植樹。為了簡化這個問題,讓我們用乙個n乘以n times n網格。讓我們給行編號1到n從上到下,給列編號1到n從左到右。用aij ij 表示第i行第j列的格仔的高...

牛客暑期多校訓練營B Boundary

給定n個點,然後確定乙個過原點的圓,要使這n個點盡可能多的存在與圓上,最後輸出最多的存在於圓上的點的個數 三點確定乙個圓,我們已知這個圓必定經過原點,所以再依次利用三點求圓心的公式列舉每兩個點與原點 三點不共線 確定的圓心,最後選擇確定次數最多的圓心構成的圓 include include incl...