HDU2017新生赛 找方块
Posted Wisdom+.+
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU2017新生赛 找方块相关的知识,希望对你有一定的参考价值。
思路:
先n^3预处理出每个点能到达的(1010串)最上面的行下标。
然后再n^3暴力一下,对于每个点,往左走看能走到哪,边走边更新面积。
现在交不了题,代码没测过。
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mem(a,b) memset(a,b,sizeof(a)) const int N=105; const int INF=0x3f3f3f3f; int mp[N][N]; int suf[N][N]; int main() { ios::sync_with_stdio(false); cin.tie(0); int T; int n; cin>>T; while(T--) { cin>>n; mem(suf,INF); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cin>>mp[i][j],suf[i][j]=i; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { for(int k=i+1;k<n;k++) { if(mp[k][j]!=mp[k-1][j])suf[k][j]=min(suf[k][j],i); else break; } } } int ans=0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { int t=suf[i][j]; ans=max(ans,i-t+1); for(int k=j-1;k>=0;k--) { t=max(t,suf[i][k]); if(mp[i][k]!=mp[i][k+1]) { ans=max(ans,(j-k+1)*(i-t+1)); } else break; } } } cout<<ans<<endl; } return 0; }
以上是关于HDU2017新生赛 找方块的主要内容,如果未能解决你的问题,请参考以下文章