Submission #795291

#TimeUsernameProblemLanguageResultExecution timeMemory
795291vjudge1Council (JOI23_council)C++17
22 / 100
4067 ms65740 KiB


// Author : حسن

#include <bits/stdc++.h>



using namespace std;

#define TL ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define rall(s) s.rbegin(),s.rend()
#define all(s) s.begin(),s.end()
#define pb push_back
#define fi first
#define se second
#define ll long long
#define ld long double
#define YES cout<<"YES\n"
#define Yes cout<<"Yes\n"
#define yes cout<<"yes\n"
#define NO cout<<"NO\n"
#define No cout<<"No\n"
#define no cout<<"no\n"


const int N = 3e5 + 9 , mod = 1e9 + 7;
ll c[N] = {} , d[N] = {} , a[N][22] = {}, b[N] = {}  , us[N] , dp[N * 4] = {};


void solve(){
    ll q , i , j , m , n , z , s  = 0, f, l , r , k , x , y , mn  = 1e18 , mx = 0;
    cin>>n>>m;
    //cout<<pow(2 , 8)<<"\n";
    for(i = 1;i  <= n; i++)
        for(j = 1; j <= m; j++)
            cin>>a[i][j] , b[j] += a[i][j];
    y = n/ 2;
    for(j = 1; j <= m; j++)
        s += b[j] >= y;
   // cout<<s<<"\n";
   //cout<<pow(2 , 5)<<"\n";
    if(n <= 3000){
        for(i = 1; i <= n; i++){
            mx = 0;
            for(j = 1; j <= m; j++){
                b[j] -= a[i][j];
                if(a[i][j] == 1 && b[j] == y - 1)
                    s--;
            }
            for(x = 1; x <= n; x++){
                if(x == i)
                continue;
                for(j = 1; j <= m; j++){
                        b[j] -= a[x][j];
                if(a[x][j] == 1 && b[j] == y - 1)
                    s--;
                }
                mx = max(mx , s);
                for(j = 1; j <= m; j++){
                        b[j] += a[x][j];
                if(a[x][j] == 1 && b[j] == y)
                    s++;
                }
            }

                for(j = 1; j <= m; j++){
                        b[j] += a[i][j];
                if(a[i][j] == 1 && b[j] == y)
                    s++;
                }
             //   cout<<s<<"\n";
           cout<<mx<<"\n";
        }
    }else {
        set<int>st;
        for(i = 1; i <= n; i++){
            for(j = 1; j <= m; j++){
                b[j] -= a[i][j];
                if(a[i][j] == 1 && b[j] == y - 1)
                    s--;
            }
            c[i] = s;
            x = 0;
            for(j = 1; j <= m; j++)
                if(b[j] == y)
                    x += (1 << j);
            us[i] =  x;
            st.insert(x);
            for(j = 1; j <= m; j++){
                        b[j] += a[i][j];
                if(a[i][j] == 1 && b[j] == y)
                    s++;
                }
        }
        //cout<<c[1]<<" "<<us[1]<<"\n";
        for(auto it : st)
            dp[it] = 1e9;
        for(i = 1; i <= n; i++)
            b[i] = 0;
        for(i = 1; i <= n; i++){
            if(i != 1)
            b[i] =  c[i] - dp[us[i]];
            for(auto it : st){
                    s = 0;
                for(j = 1; j <= m; j++){
                    if((((1 << j) & it) != 0) && a[i][j])
                        s++;
                }
                dp[it] = min(dp[it] , s);
            }
        }
        for(auto it : st)
            dp[it] = 1e9;
        for(i = n; i >= 1; i--){
            //if(i == 1)
            //    b[i] = c[i] - dp[us[i]];
            //if(i != n)
            b[i]=  max(b[i] ,  c[i] - dp[us[i]]);
            for(auto it : st){
                    s = 0;
                for(j = 1; j <= m; j++){
                    if((((1 << j) & it) != 0) && a[i][j])
                        s++;
                }
                dp[it] = min(dp[it] , s);
            }
        }
        for(i = 1; i <= n; i++)
            cout<<b[i]<<"\n";
    }
}

int main(){

     TL;
     /*
     #ifndef ONLINE_JUDGE
     freopen("input.txt", "r", stdin);
     freopen("output.txt", "w", stdout);
     #endif
     */
int t = 1;
//cin>>t;

while(t--)
     {
     solve();
     }

}
// Author : حسن

Compilation message (stderr)

council.cpp: In function 'void solve()':
council.cpp:32:8: warning: unused variable 'q' [-Wunused-variable]
   32 |     ll q , i , j , m , n , z , s  = 0, f, l , r , k , x , y , mn  = 1e18 , mx = 0;
      |        ^
council.cpp:32:28: warning: unused variable 'z' [-Wunused-variable]
   32 |     ll q , i , j , m , n , z , s  = 0, f, l , r , k , x , y , mn  = 1e18 , mx = 0;
      |                            ^
council.cpp:32:40: warning: unused variable 'f' [-Wunused-variable]
   32 |     ll q , i , j , m , n , z , s  = 0, f, l , r , k , x , y , mn  = 1e18 , mx = 0;
      |                                        ^
council.cpp:32:43: warning: unused variable 'l' [-Wunused-variable]
   32 |     ll q , i , j , m , n , z , s  = 0, f, l , r , k , x , y , mn  = 1e18 , mx = 0;
      |                                           ^
council.cpp:32:47: warning: unused variable 'r' [-Wunused-variable]
   32 |     ll q , i , j , m , n , z , s  = 0, f, l , r , k , x , y , mn  = 1e18 , mx = 0;
      |                                               ^
council.cpp:32:51: warning: unused variable 'k' [-Wunused-variable]
   32 |     ll q , i , j , m , n , z , s  = 0, f, l , r , k , x , y , mn  = 1e18 , mx = 0;
      |                                                   ^
council.cpp:32:63: warning: unused variable 'mn' [-Wunused-variable]
   32 |     ll q , i , j , m , n , z , s  = 0, f, l , r , k , x , y , mn  = 1e18 , mx = 0;
      |                                                               ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...