求所有極大全一矩陣的個數。
//
// 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記錄所有數字的貢獻就...