Submission #741872

# Submission time Handle Problem Language Result Execution time Memory
741872 2023-05-15T03:08:31 Z pavement Council (JOI23_council) C++17
40 / 100
4000 ms 74896 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
//~ #define int long long
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define ppb pop_back
#define eb emplace_back
#define g0(a) get<0>(a)
#define g1(a) get<1>(a)
#define g2(a) get<2>(a)
#define g3(a) get<3>(a)
#define g4(a) get<4>(a)
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
using db = double;
using ll = long long;
using ld = long double;
using ii = pair<int, int>;
using iii = tuple<int, int, int>;
using iiii = tuple<int, int, int, int>;
using iiiii = tuple<int, int, int, int, int>;
template<class key, class value = null_type, class cmp = less<key> >
using ordered_set = tree<key, value, cmp, rb_tree_tag, tree_order_statistics_node_update>;

int N, M, X[300005], cnt[25];
bool b;
basic_string<ii> vec[(1 << 20) + 5], ans[(1 << 20) + 5];

void merge(basic_string<ii> &a, basic_string<ii> &b) {
	basic_string<ii> tmp, tmp2;
	for (auto el : a) tmp.pb(mp(el.second, el.first));
	for (auto el : b) tmp.pb(mp(el.second, el.first));
	sort(tmp.begin(), tmp.end());
	for (int i = 0; i < (int)tmp.size(); i++) {
		if (i == 0 || tmp[i - 1].first != tmp[i].first) tmp2.pb(mp(tmp[i].second, tmp[i].first));
	}
	sort(tmp2.begin(), tmp2.end());
	while (tmp2.size() > 4) tmp2.ppb();
	a.clear();
	for (auto el : tmp2) a.pb(el);
}

main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> N >> M;
	for (int i = 1; i <= N; i++) {
		for (int j = 0; j < M; j++) {
			cin >> b;
			X[i] |= (1 << j) * b;
			cnt[j] += b;
		}
		if ((int)vec[X[i]].size() < 4) vec[X[i]].pb(mp(__builtin_popcount(X[i]), i));
	}
	for (int m = 0; m < (1 << M); m++) {
		for (int s = m; ; s = (s - 1) & m) {
			merge(vec[s], vec[m]);
			if (s == 0) break;
		}
	}
	for (int m = 0; m < (1 << M); m++) {
		for (int s = m; ; s = (s - 1) & m) {
			// bm = s, k = m
			basic_string<ii> cpy;
			for (auto el : vec[s ^ m]) cpy.pb(mp(el.first + __builtin_popcount(s) - __builtin_popcount(m), el.second));
			merge(ans[s], cpy);
			if (s == 0) break;
		}
	}
	//~ for (int i = 0; i < (1 << M); i++) {
		//~ cout << "@ " << i << '\n';
		//~ for (auto el : ans[i]) cout << el.first << ' ' << el.second << '\n';
	//~ }
	for (int i = 1; i <= N; i++) {
		int cur = 0, bm = 0;
		for (int j = 0; j < M; j++) {
			if (X[i] & (1 << j)) cnt[j]--;
		}
		for (int j = 0; j < M; j++) {
			if (cnt[j] > N / 2) cur++;
			else if (cnt[j] == N / 2) cur++, bm |= (1 << j);
		}
		//~ cout << "BM: " << bm << '\n';
		for (auto el : ans[bm]) {
			//~ cout << el.first << ' ' << el.second << '\n';
			if (el.second != i) {
				cur -= el.first;
				break;
			}
		}
		cout << cur << '\n';
		for (int j = 0; j < M; j++) {
			if (X[i] & (1 << j)) cnt[j]++;
		}
	}
}

Compilation message

council.cpp:46:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   46 | main() {
      | ^~~~
# Verdict Execution time Memory Grader output
1 Correct 31 ms 65868 KB Output is correct
2 Correct 172 ms 66060 KB Output is correct
3 Correct 37 ms 65944 KB Output is correct
4 Correct 34 ms 65928 KB Output is correct
5 Execution timed out 4070 ms 65904 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 31 ms 65868 KB Output is correct
2 Correct 172 ms 66060 KB Output is correct
3 Correct 37 ms 65944 KB Output is correct
4 Correct 34 ms 65928 KB Output is correct
5 Execution timed out 4070 ms 65904 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 30 ms 65876 KB Output is correct
2 Correct 98 ms 68292 KB Output is correct
3 Correct 110 ms 68420 KB Output is correct
4 Correct 81 ms 67996 KB Output is correct
5 Correct 104 ms 68428 KB Output is correct
6 Correct 78 ms 67936 KB Output is correct
7 Correct 111 ms 68380 KB Output is correct
8 Correct 32 ms 65984 KB Output is correct
9 Correct 32 ms 65912 KB Output is correct
10 Correct 37 ms 65860 KB Output is correct
11 Correct 33 ms 65984 KB Output is correct
12 Correct 33 ms 65980 KB Output is correct
13 Correct 37 ms 65912 KB Output is correct
14 Correct 31 ms 65892 KB Output is correct
15 Correct 32 ms 65972 KB Output is correct
16 Correct 33 ms 65868 KB Output is correct
17 Correct 34 ms 66140 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 30 ms 65876 KB Output is correct
2 Correct 98 ms 68292 KB Output is correct
3 Correct 110 ms 68420 KB Output is correct
4 Correct 81 ms 67996 KB Output is correct
5 Correct 104 ms 68428 KB Output is correct
6 Correct 78 ms 67936 KB Output is correct
7 Correct 111 ms 68380 KB Output is correct
8 Correct 32 ms 65984 KB Output is correct
9 Correct 32 ms 65912 KB Output is correct
10 Correct 37 ms 65860 KB Output is correct
11 Correct 33 ms 65984 KB Output is correct
12 Correct 33 ms 65980 KB Output is correct
13 Correct 37 ms 65912 KB Output is correct
14 Correct 31 ms 65892 KB Output is correct
15 Correct 32 ms 65972 KB Output is correct
16 Correct 33 ms 65868 KB Output is correct
17 Correct 34 ms 66140 KB Output is correct
18 Correct 34 ms 65868 KB Output is correct
19 Correct 32 ms 65876 KB Output is correct
20 Correct 331 ms 70888 KB Output is correct
21 Correct 289 ms 70064 KB Output is correct
22 Correct 293 ms 70228 KB Output is correct
23 Correct 261 ms 71196 KB Output is correct
24 Correct 276 ms 70556 KB Output is correct
25 Correct 340 ms 70912 KB Output is correct
26 Correct 371 ms 71096 KB Output is correct
27 Correct 54 ms 66004 KB Output is correct
28 Correct 31 ms 65968 KB Output is correct
29 Correct 34 ms 65948 KB Output is correct
30 Correct 37 ms 65964 KB Output is correct
31 Correct 32 ms 66000 KB Output is correct
32 Correct 34 ms 65980 KB Output is correct
33 Correct 36 ms 66004 KB Output is correct
34 Correct 38 ms 66008 KB Output is correct
35 Correct 60 ms 66128 KB Output is correct
36 Correct 69 ms 65956 KB Output is correct
37 Correct 32 ms 65964 KB Output is correct
38 Correct 32 ms 65956 KB Output is correct
39 Correct 35 ms 65880 KB Output is correct
40 Correct 34 ms 66004 KB Output is correct
41 Correct 32 ms 65988 KB Output is correct
42 Correct 35 ms 65876 KB Output is correct
43 Correct 42 ms 65916 KB Output is correct
44 Correct 62 ms 66040 KB Output is correct
45 Correct 66 ms 66160 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 30 ms 65876 KB Output is correct
2 Correct 98 ms 68292 KB Output is correct
3 Correct 110 ms 68420 KB Output is correct
4 Correct 81 ms 67996 KB Output is correct
5 Correct 104 ms 68428 KB Output is correct
6 Correct 78 ms 67936 KB Output is correct
7 Correct 111 ms 68380 KB Output is correct
8 Correct 32 ms 65984 KB Output is correct
9 Correct 32 ms 65912 KB Output is correct
10 Correct 37 ms 65860 KB Output is correct
11 Correct 33 ms 65984 KB Output is correct
12 Correct 33 ms 65980 KB Output is correct
13 Correct 37 ms 65912 KB Output is correct
14 Correct 31 ms 65892 KB Output is correct
15 Correct 32 ms 65972 KB Output is correct
16 Correct 33 ms 65868 KB Output is correct
17 Correct 34 ms 66140 KB Output is correct
18 Correct 34 ms 65868 KB Output is correct
19 Correct 32 ms 65876 KB Output is correct
20 Correct 331 ms 70888 KB Output is correct
21 Correct 289 ms 70064 KB Output is correct
22 Correct 293 ms 70228 KB Output is correct
23 Correct 261 ms 71196 KB Output is correct
24 Correct 276 ms 70556 KB Output is correct
25 Correct 340 ms 70912 KB Output is correct
26 Correct 371 ms 71096 KB Output is correct
27 Correct 54 ms 66004 KB Output is correct
28 Correct 31 ms 65968 KB Output is correct
29 Correct 34 ms 65948 KB Output is correct
30 Correct 37 ms 65964 KB Output is correct
31 Correct 32 ms 66000 KB Output is correct
32 Correct 34 ms 65980 KB Output is correct
33 Correct 36 ms 66004 KB Output is correct
34 Correct 38 ms 66008 KB Output is correct
35 Correct 60 ms 66128 KB Output is correct
36 Correct 69 ms 65956 KB Output is correct
37 Correct 32 ms 65964 KB Output is correct
38 Correct 32 ms 65956 KB Output is correct
39 Correct 35 ms 65880 KB Output is correct
40 Correct 34 ms 66004 KB Output is correct
41 Correct 32 ms 65988 KB Output is correct
42 Correct 35 ms 65876 KB Output is correct
43 Correct 42 ms 65916 KB Output is correct
44 Correct 62 ms 66040 KB Output is correct
45 Correct 66 ms 66160 KB Output is correct
46 Correct 167 ms 66116 KB Output is correct
47 Correct 2920 ms 72892 KB Output is correct
48 Correct 1190 ms 72168 KB Output is correct
49 Correct 1177 ms 72544 KB Output is correct
50 Correct 1716 ms 73772 KB Output is correct
51 Correct 1125 ms 72196 KB Output is correct
52 Correct 3321 ms 73116 KB Output is correct
53 Correct 3297 ms 73248 KB Output is correct
54 Correct 1648 ms 67128 KB Output is correct
55 Correct 1207 ms 66840 KB Output is correct
56 Correct 1604 ms 66772 KB Output is correct
57 Correct 1172 ms 66796 KB Output is correct
58 Correct 1842 ms 66884 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 30 ms 65876 KB Output is correct
2 Correct 98 ms 68292 KB Output is correct
3 Correct 110 ms 68420 KB Output is correct
4 Correct 81 ms 67996 KB Output is correct
5 Correct 104 ms 68428 KB Output is correct
6 Correct 78 ms 67936 KB Output is correct
7 Correct 111 ms 68380 KB Output is correct
8 Correct 32 ms 65984 KB Output is correct
9 Correct 32 ms 65912 KB Output is correct
10 Correct 37 ms 65860 KB Output is correct
11 Correct 33 ms 65984 KB Output is correct
12 Correct 33 ms 65980 KB Output is correct
13 Correct 37 ms 65912 KB Output is correct
14 Correct 31 ms 65892 KB Output is correct
15 Correct 32 ms 65972 KB Output is correct
16 Correct 33 ms 65868 KB Output is correct
17 Correct 34 ms 66140 KB Output is correct
18 Correct 34 ms 65868 KB Output is correct
19 Correct 32 ms 65876 KB Output is correct
20 Correct 331 ms 70888 KB Output is correct
21 Correct 289 ms 70064 KB Output is correct
22 Correct 293 ms 70228 KB Output is correct
23 Correct 261 ms 71196 KB Output is correct
24 Correct 276 ms 70556 KB Output is correct
25 Correct 340 ms 70912 KB Output is correct
26 Correct 371 ms 71096 KB Output is correct
27 Correct 54 ms 66004 KB Output is correct
28 Correct 31 ms 65968 KB Output is correct
29 Correct 34 ms 65948 KB Output is correct
30 Correct 37 ms 65964 KB Output is correct
31 Correct 32 ms 66000 KB Output is correct
32 Correct 34 ms 65980 KB Output is correct
33 Correct 36 ms 66004 KB Output is correct
34 Correct 38 ms 66008 KB Output is correct
35 Correct 60 ms 66128 KB Output is correct
36 Correct 69 ms 65956 KB Output is correct
37 Correct 32 ms 65964 KB Output is correct
38 Correct 32 ms 65956 KB Output is correct
39 Correct 35 ms 65880 KB Output is correct
40 Correct 34 ms 66004 KB Output is correct
41 Correct 32 ms 65988 KB Output is correct
42 Correct 35 ms 65876 KB Output is correct
43 Correct 42 ms 65916 KB Output is correct
44 Correct 62 ms 66040 KB Output is correct
45 Correct 66 ms 66160 KB Output is correct
46 Correct 167 ms 66116 KB Output is correct
47 Correct 2920 ms 72892 KB Output is correct
48 Correct 1190 ms 72168 KB Output is correct
49 Correct 1177 ms 72544 KB Output is correct
50 Correct 1716 ms 73772 KB Output is correct
51 Correct 1125 ms 72196 KB Output is correct
52 Correct 3321 ms 73116 KB Output is correct
53 Correct 3297 ms 73248 KB Output is correct
54 Correct 1648 ms 67128 KB Output is correct
55 Correct 1207 ms 66840 KB Output is correct
56 Correct 1604 ms 66772 KB Output is correct
57 Correct 1172 ms 66796 KB Output is correct
58 Correct 1842 ms 66884 KB Output is correct
59 Execution timed out 4083 ms 74896 KB Time limit exceeded
60 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 31 ms 65868 KB Output is correct
2 Correct 172 ms 66060 KB Output is correct
3 Correct 37 ms 65944 KB Output is correct
4 Correct 34 ms 65928 KB Output is correct
5 Execution timed out 4070 ms 65904 KB Time limit exceeded
6 Halted 0 ms 0 KB -