Submission #1118386

#TimeUsernameProblemLanguageResultExecution timeMemory
1118386Younis_DwaiBomb (IZhO17_bomb)C++14
15 / 100
20 ms3164 KiB
//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <bits/stdc++.h>
#define endl "\n"
#define F first
#define S second
#define pb push_back
//#define int long long
#define in insert
#define mid (l+r)/2
#define in insert
using namespace std;
const int N=30;
char b[N][N];
int n,m,pref[N][N];
set<pair<int,int>> adj[N][N];
void init(){
     for(int i=1;i<=n;i++){
         for(int j=1;j<=m;j++){
             pref[i][j]=pref[i-1][j]+pref[i][j-1]-pref[i-1][j-1]+bool(b[i][j]=='1');
         }
     }
     return ;
}
int query(int x , int y , int x1 , int y1){
    return pref[x1][y1]-pref[x1][y-1]-pref[x-1][y1]+pref[x-1][y-1];
}
int32_t main(){
    ios::sync_with_stdio(false);cin.tie(nullptr);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++) cin>>b[i][j];
    init();
    if(n==1){
       int mx=m;
       for(int i=1;i<=m;i++){
           if(b[1][i]=='1'){
              int cnt=1;
              while(i+1<=m && b[1][i+1]==b[1][i]){
                    ++i;
                    ++cnt;

              }
              mx=min(mx,cnt);
              ++i;
           }
       }
       cout<<mx;
    }
    else if(m==1){
          int mx=n;
          for(int i=1;i<=n;i++){
              if(b[i][1]=='1'){
                 int cnt=1;
                 while(i+1<=n && b[i+1][1]==b[i][1]){
                    ++i;
                    ++cnt;
                 }
                 mx=min(mx,cnt);
                 ++i;
              }
          }
          cout<<mx;
    }
    else{
         int mx=0,all=0;
         for(int i=1;i<=n;i++)
             for(int j=1;j<=m;j++) if(b[i][j]=='1') ++all;
         for(int i=1;i<=n;i++){
             for(int j=1;j<=m;j++){
                 if(b[i][j]=='0') continue ;
                 for(int i1=1;i1<=i;i1++){
                     for(int j1=1;j1<=j;j1++){
                         for(int i2=i;i2<=n;i2++){
                             for(int j2=j;j2<=m;j2++){
                                 if(b[i1][j1]=='1' && b[i2][j2]=='1' && query(i1,j1,i2,j2)==(i2-i1+1)*(j2-j1+1)){
                                    adj[i2-i1+1][j2-j1+1].in({i,j});
                                 }
                             }
                         }
                     }
                 }
             }
         }
         for(int i=1;i<=n;i++){
             for(int j=1;j<=m;j++){
                 int x=adj[i][j].size();
                 if(x==all) mx=max(mx,i*j);
             }
         }
         cout<<mx;
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...