題
【問題描述】
xmyz一年一度的運動會開始了,作為本次活動的第乙個集體專案,段長林老師特別重視,經過調查研究,林老師發現當身高接近,而且男女生人數相等時,列隊做操是最整齊的。但是按評分的要求,參加的人數越多分數越高,於是林段想到乙個辦法:他讓年段所有同學按照身高排成一排,然後從中選出連續的若干個人,使得這些人中男女人數相等。根據評分規則,林老師當然希望他能選出的人越多越好。請編寫程式告訴他,他最多可以選出多少人來。
【輸入】
第一行有乙個正整數n,代表年段的人數。
第二行有n個用空格隔開的數,這些數只能是0或1,其中,0代表乙個女生,1代表乙個男生
【輸出】
輸出乙個非負整數。這個數表示在輸入資料中最長的一段男女人數相等的子串行長度。
如果不存在男女人數相等的子串行,請輸出0。
【輸入輸出樣例1】
0 1 0 0 0 1 1 0 0
樣例說明:
選擇第2個人至第7個人可以獲得男女人數均為3的最長子序列。
【限制】
對於30%的資料,n<=100;
對於50%的資料,n<=1 000;
對於100%的資料,n<=100 000
顯然dp啊
先看zkq的n^2暴力
#pragma gcc optimize(2)
#include
#include
const
int n=
100100
;bool a[n]
;int sum[n]
;int n,m,mid;
int ans;
inline
void
read
(int
&x)while
(c<=
'9'&&c>=
'0') x=
(x<<1)
+(x<<3)
+c-'0'
,c=getchar()
; x=f==
1?x:
-x;}
inline
void
readbl
(bool
&x)if
(c==
'1')x=1;
}using
namespace std;
intmain()
if(sum[n]
==n||sum[n]==0
)if(n&1
) m=n-1;
else m=n;
for(
register
int l=m;l>=
2;l-=2
)}}}
我也不知道咋做的 dp
#include
#define re register
#define read(x)\
\ while((c>='0'&&c<='9'))\
\x=x*f;\
}#define max_(x,q)\
(xusing
namespace std;
int ans,n,a[
1000001
],l[
1000001
],r[
1000001
],g,b,t=n;
intmain()
if(g==
0||b==0)
for(
int i=
1;i<=n;i++
)for
(int i=
0;i<=
2*n;i++
) ans=
max_
(ans,r[i]
-l[i]);
printf
("%d"
,ans)
;}
對Numpy廣播操作的理解
1.首先檢查兩個矩陣維數是否相同,若不同,對維數少的補一。注意這裡的維數不是指n行d列中的n和d的值,對於一般的矩陣維數就是2。若乙個兩維的矩陣 n,d 和乙個一維的陣列 m,相乘,補一操作就是將那個一維的陣列變為 1,m 補一總是在shape陣列的開始補一。2.輸出陣列是輸入陣列各維度 軸 的最大...
Flink實操 廣播變數 累加器 分布式快取
三 累加器 四 分布式快取 flink支援廣播。可以將資料廣播到taskmanager上,資料儲存到記憶體中。資料儲存在記憶體中,這樣可以減緩大量的shuffle操作 比如在資料join階段,不可避免的就是大量的shuffle操作,我們可以把其中乙個datastream廣播出去,一直載入到taskm...