| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1334677 | WongYiKai | Council (JOI23_council) | C++20 | 64 ms | 4932 KiB |
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll n,m;
cin >> n >> m;
ll a[n][m];
unordered_map<ll,ll> cover[1<<m];
vector<ll> cover2[1<<m];
cover2[0].resize(m+1,0);
ll sum[m+1];
memset(sum,0,sizeof(sum));
for (int i=0;i<n;i++){
ll num = 0;
ll cnt = 0;
for (int j=0;j<m;j++){
cin >> a[i][j];
num += (a[i][j]<<j);
if (a[i][j]==1) cnt++;
sum[j] += a[i][j];
}
cover[0][num]++;
}
for (int i=1;i<(1<<m);i++){
ll num = m;
ll on;
for (int j=0;j<m;j++){
if (i&(1<<j)) {
num--;
on = j;
}
}
cover2[i].resize(num+1,0);
for (ll idx=0;idx<1;idx++){
ll bit = on;
//unblock bit
ll pos = bit-idx;
for (pair<ll,ll> pr:cover[i-(1<<bit)]){
ll k = pr.first;
ll newk = k&((1<<pos)-1);
ll rightk = (k>>(pos+1));
newk += (rightk<<pos);
cover[i][newk] += pr.second;
}
}
}
/*
for (int i=0;i<(1<<m);i++){
ll num = m;
for (int j=0;j<m;j++){
if (i&(1<<j)) {
cout << "1 ";
num--;
}
else cout << "0 ";
}
cout << "\n";
for (int j=0;j<(1<<num);j++){
for (int k=0;k<num;k++){
if (j&(1<<k)) cout << "1 ";
else cout << "0 ";
}
cout << cover[i][j] << "\n";
}
cout << "\n";
}
*/
ll dis[(1<<m)];
memset(dis,-1,sizeof(dis));
ll cutoff = n/2;
for (int i=0;i<n;i++){
ll useless = 0;
ll cnt = 0;
ll num = m;
for (int j=0;j<m;j++){
if (sum[j]-a[i][j] > cutoff){
cnt++;
}
if (sum[j]-a[i][j] != cutoff){
useless += (1<<j);
num--;
}
}
if (dis[useless]==-1){
for (int j=0;j<(1<<num);j++){
ll x = __builtin_popcount(j);
cover2[useless][x] += cover[useless][j];
}
dis[useless] = 1;
}
for (int x=0;x<=num;x++){
if (cover2[useless][x] > 1){
cout << cnt + num - x << "\n";
break;
}
else if (cover2[useless][x] == 1){
ll me = 0;
for (int j=0;j<m;j++){
if (useless&(1<<j)) continue;
me += a[i][j];
}
if (me != x){
cout << cnt + num - x << "\n";
break;
}
}
}
}
}| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
