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

2022-06-29 08:06:08 字數 2024 閱讀 3037

傳送門

題意:就是說給你乙個由0或1組成的字串,讓你找出來乙個0的數量和1的數量相等的最長子字串和最長子序列

題解:可以把0當作-1,把1當作1來計算字串的字首和

這樣的話,當兩個位置的字首和的值相同的時候,那麼這兩個位置中間的部分就滿足題意,除此之外字首和為0的地方也滿足題意

因為這是字首和,當兩個位置字首和相同就可以讓後乙個減去前乙個字首和,那麼這中間一段便是0和1相同的長度

為了防止出現負數下標,可以讓計算出來的字首和加上乙個大正數

**一:

1 #include2 #include

3 #include4 #include5

using

namespace

std;

6char a[100005];7

int ans[200005][2];8

int sum[100005];9

intmain()

1024

else

2529

if(ans[sum[i]+100000][0]==0)30

33else

3439}40

if(s0==s1)

4144

else

if(s0

4548

else

if(s0>s1)

4952

return0;

53 }

view code

**二:

1 #include 2

3#define ll long long45

using

namespace

std;67

const

int n=1e5+10;8

9int pre[2*n];

1011

char

s[n];

1213

int main(void)14

1538

39if(pre[sum+n]==0) pre[sum+n]=i;

4041

else

if(i-pre[sum+n]>ans)

4243 ans=i-pre[sum+n];

4445

} 46

47 printf("

%d %d\n

",ans,min(cnt0,cnt1)*2

);48

49return0;

5051 }

view code

h題:原文:

給你n(n為偶數且n<=1e3)個不同的點(xi,yi),|xi|,|yi|<=1e3

要求你輸出兩個整點,使之確定的直線,將*面劃成兩部分後,一邊恰有一半

考慮按y增序排,y相同按x增序,也就是處理二維偏序的排序方式,

如果過n/2和n/2+1兩個點的中點,畫一條斜率為負,但*似水*的線,是可以將上下剖開的

但這個中點可能不是整點,所以直接用n/2和n/2+1兩個點*移,

乙個左移1e8單位,乙個右移1e8單位,從而將直線拉*

但n/2和n/2+1兩個點可能位於同一水*線上,這個時候,

左邊的點再上移1單位,右邊的點下移1單位,就可以使原來的兩個點不重合了

**:

1 #include2

3using

namespace

std;45

const

int n=1e3+5;6

7const

int off=1e8;89

intt,n;

1011

struct

node

1213

e[n],c,d;

1819

bool

operator

2021

2627

intmain()

2829

5253

return0;

5455 }

view code

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...