Submission #1308365

#TimeUsernameProblemLanguageResultExecution timeMemory
1308365thnhannCouncil (JOI23_council)C++20
25 / 100
4091 ms24868 KiB
//#pragma GCC optimize("Ofast,unroll-loops") //#pragma GCC target("avx,avx2,fma,lzcnt,popcnt") #include <bits/stdc++.h> #define ll long long #define fi first #define se second #define pb push_back #define ii pair<int,int> #define ill pair<ll,ll> #define el cout<<'\n' #define int long long const ll mod=1e9+7; const int dx[]={1,0,-1,0},dy[]={0,1,0,-1}; const int nmax=1e6; const int inf =2e9; void add(int &a, int b) { a += b; if (a >= mod) a -= mod; if (a < 0) a += mod; } template<typename T> void chkmin(T& x, T y) {if(x > y) x = y;} template<typename T> void chkmax(T& x, T y) {if(x < y) x = y;} using namespace std; mt19937 rd(chrono::steady_clock::now().time_since_epoch().count()); int rand(int l, int r) { return uniform_int_distribution<int>(l, r) (rd); } //int n; int cnt[25]; bool a[300005][20]; int n,m; vector<int>p; int maskfull; int candidate[300005]; int ans = 0; struct MIANDMI{ int mi1; int idx; int mi2; } mi[nmax + 5]; int type[25]; int id[25]; signed main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin >> n >> m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin >> a[i][j]; if(a[i][j]) cnt[j]++; } } int k = n / 2; maskfull = 1; int timer = 0; for(int i=1;i<=m;i++) { if(cnt[i] >= k + 2) { ans++; } else { if(cnt[i] == k) { type[i] = 1; p.pb(i); id[i] = timer++; } else if(cnt[i] == k + 1) { type[i] = 2; p.pb(i); id[i] = timer++; } } } // // for(auto i:p) // cout << i << " "; // el; for(int mask=0;mask<(1<<((int)p.size()));mask++) { mi[mask].mi1 = inf; mi[mask].mi2 = inf; for(int i=1;i<=n;i++) { int cur = 0; for(int j=0;j<p.size();j++) if((mask >> j) & 1) { if(a[i][p[j]]) cur++; } if(mi[mask].mi1 > cur) { mi[mask].mi2 = mi[mask].mi1; mi[mask].mi1 = cur; mi[mask].idx = i; } else { if(mi[mask].mi2 > cur) mi[mask].mi2 = cur; } } // for(int j=0;j<p.size();j++) // { // if((mask >> j) & 1) // cout << p[j] << " "; // } // el; // cout << mi[mask].mi1 << " " << mi[mask].idx << " " << mi[mask].mi2;el; } for(int i=1;i<=n;i++) { int anscur = ans; vector<int>bucket; for(auto j:p) { if(a[i][j]) { if(type[j] == 2) { bucket.pb(id[j]); } } else { if(type[j] == 1) { bucket.pb(id[j]); } else anscur++; } } // el; // cout << i;el; // for(auto bit:bucket) // cout << bit << " "; // el; // cout << anscur;el; int mask = 0; for(auto bit:bucket) mask |= (1<<bit); anscur += bucket.size(); int div; if(i == mi[mask].idx) div = mi[mask].mi2; else div = mi[mask].mi1; anscur -= div; cout << anscur;el; } } // "Can i get a kiss? And can u make it last forever?"
#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...