傳送門
題意:就是說給你乙個由0或1組成的字串,讓你找出來乙個0的數量和1的數量相等的最長子字串和最長子序列
題解:可以把0當作-1,把1當作1來計算字串的字首和
這樣的話,當兩個位置的字首和的值相同的時候,那麼這兩個位置中間的部分就滿足題意,除此之外字首和為0的地方也滿足題意
因為這是字首和,當兩個位置字首和相同就可以讓後乙個減去前乙個字首和,那麼這中間一段便是0和1相同的長度
為了防止出現負數下標,可以讓計算出來的字首和加上乙個大正數
**一:
1 #include2 #includeview code3 #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 }
**二:
1 #include 2view code3#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 }
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 #include2view code3using
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 }
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...