2019牛客多校第八場

2022-02-24 15:12:57 字數 1516 閱讀 8123

求所有極大全一矩陣的個數。

//

// created by keane on 2019/8/10.

//#include using namespace std;

typedef long long ll;

const int n=3050;

int a[n][n];

int n,m;

char s[n];

//每個1向下延伸

int dw[n][n];

int pre[n][n];

//每個dw作為最小值延伸

int le[n][n],ri[n][n];

stackss;

map,bool> vis;

int main()

}for(int i=n;i>=1;i--)

if(a[i+1][j]==1)else

}while(!ss.empty())

for(int j=1;j<=m;j++)

if(ss.size()>0)else

ss.push(j);

}while(!ss.empty())

for(int j=m;j>=1;j--)

if(ss.size()>0)else

ss.push(j);}}

int ans=0;

for(int i=1;i<=n;i++)

int l=le[i][j];

int r=ri[i][j];

if(vis)

vis=true;

if(pre[i-1][r]-pre[i-1][l-1]!=r-l+1)}}

printf("%d\n",ans);

return 0;

}

給定乙個序列,求所有區間的區間不同數個數之和。

#include using namespace std;

typedef long long ll;

const int n=1e5+50;

int n,a[n],p[n];

int main(void)

printf("%lld\n",ans);

return 0;

}

給定乙個\(n(n=2^k)\),構造乙個只含1和-1的矩陣使得任意兩行向量的點乘為0。

#include using namespace std;

const int n=2e3+50;

int n,a[n][n];

int main(void)

int a=st.top();

st.pop();

int b=st.top();

st.pop();

int c=st.top();

st.pop();

if(a!=b || b!=c)else

}printf("%d\n",ans);

return 0;

}

2019 牛客 多校賽 第八場

乙個區間的貢獻為這個區間的不同數字的個數,求所有子區間的貢獻和 反向思考,計算乙個數字在子區間 現的次數,當區間的左端點在這個數字上一次出現位置和當前位置之間,並且右端點在當前位置之後,這個數字都產生了貢獻,所以當前位置的數字的貢獻就是左端點數量 右端點數量,然後遍歷一遍。include defin...

2019牛客多校第八場題解 A

a 給你乙個n m的01矩陣,求出所有最大全1矩陣的數量,保證任意兩個矩陣不相互包含。考慮單調棧求最大矩形面積的做法。對於矩陣 0 0 0 0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 0 我們先預處理h i j 為以該行為底的最大高度。那麼我們只要知道這個矩形最左邊的能夠到達的位...

牛客多校第八場

簽到題,可真短。題意 給n個數,對於每個連續子串行求區間內不同數字的個數的和。做法 一開始列舉每個區間的右端點i,判斷每個數字在區間左端點為1 i這個範圍內對右端點i的貢獻,然後累加答案,然後超時了。之後想到,每次變化範圍只會變乙個數字,只會改變乙個數字的貢獻,所以開了乙個sum記錄所有數字的貢獻就...