Submission #1308366

#TimeUsernameProblemLanguageResultExecution timeMemory
1308366ojuz_userCouncil (JOI23_council)C++20
100 / 100
519 ms34384 KiB
#include <bits/stdc++.h> using namespace std; #define file "o" #define ff(i, a, b) for(auto i=(a); i<=(b); ++i) #define ffr(i, b, a) for(auto i=(b); i>=(a); --i) #define nl "\n" #define ss " " #define pb emplace_back #define fi first #define se second #define sz(s) (int)s.size() #define all(s) (s).begin(), (s).end() #define ms(a,x) memset(a, x, sizeof (a)) #define cn continue #define re exit(0) typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef vector<int> vi; typedef vector<ll> vll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef vector<pii> vpii; typedef vector<pll> vpll; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); inline ll ran(ll l, ll r) { return uniform_int_distribution<ll> (l, r)(rng); } inline void rf() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); if(fopen(file".inp","r")) { freopen(file".inp","r",stdin); freopen(file".out","w",stdout); } } const int mod=1e9+7; const int maxn=3e5+15; const ll inf=1e16; template<typename T> inline void add(T &x, const T &y) { x+=y; if(x>=mod) x-=mod; if(x<0) x+=mod; } template<typename T> inline bool maxi(T &a, T b) { if(a>=b) return 0; a=b; return 1; } template<typename T> inline bool mini(T &a, T b) { if(a<=b) return 0; a=b; return 1; } int n, m; bool a[maxn][25]; int zero[maxn], cnt[25]; vi tmp[2]; pii id[(1<<20)+5]; struct cand{int val, p;} b1[(1<<20)+5], b2[(1<<20)+5]; inline void addc(cand &a, cand &b, const cand &x) { if(x.p==0 || a.p==x.p || b.p==x.p) return; if(x.val>a.val) b=a, a=x; else if(x.val>b.val) b=x; } inline void addp(pii &mask, int x) { if(x==0 || mask.fi==x || mask.se==x) return; if(mask.fi==0) mask.fi=x; else if(mask.se==0) mask.se=x; } inline void merge(pii &a, const pii &b) { addp(a, b.fi); addp(a, b.se); } signed main() { rf(); cin>>n>>m; ff(i, 1, n) ff(j, 0, m-1) { bool bit; cin>>bit; a[i][j]=bit; if(bit) ++cnt[j]; else zero[i]|=(1<<j); } ff(i, 1, n) addp(id[zero[i] ], i); ff(i, 0, m-1) ff(mask ,0, (1<<m)-1) if(!((mask>>i)&1)) { int nmask=(mask|(1<<i)); merge(id[mask], id[nmask]); } int all=(1<<m)-1; ff(mask, 0, all) { b1[mask]=b2[mask]={-1, 0}; int c=__builtin_popcount(mask); if(id[mask].fi) addc(b1[mask], b2[mask], {c, id[mask].fi}); if(id[mask].se) addc(b1[mask], b2[mask], {c, id[mask].se}); } ff(i, 0, m-1) ff(mask, 0, all) if((mask>>i)&1) { int sub=(mask^(1<<i) ); addc(b1[mask], b2[mask], b1[sub]); addc(b1[mask], b2[mask], b2[sub]); } int sl=0; ff(i, 0, m-1) { if(cnt[i]>=n/2+2) ++sl; else if(cnt[i]<n/2) cn; else tmp[cnt[i]-n/2].pb(i); } ff(boss, 1, n) { int ans=sl; vi bit; for(auto i:tmp[1]) { if(!a[boss][i]) ++ans; else bit.pb(i); } for(auto i:tmp[0]) if(!a[boss][i]) bit.pb(i); sort(all(bit)); int mask=0; for(auto i:bit) mask|=(1<<i); int mx=0; if(b1[mask].p!=0 && b1[mask].p!=boss) mx=b1[mask].val; else if(b2[mask].p!=0 && b2[mask].p!=boss) mx=b2[mask].val; if(mx<0) mx=0; ans+=mx; cout<<ans<<nl; } re; }

Compilation message (stderr)

council.cpp: In function 'void rf()':
council.cpp:40:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |         freopen(file".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
council.cpp:41:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |         freopen(file".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...