#include <cstdio>
#include <algorithm>
#include <random>
#include <chrono>
std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count());
const int N = 4100;
const int K = 20;
unsigned long long a[N][(N - 1 >> 6) + 1][4];
int n, m, x, ord[N], mask[N], p[N], subset_size[K], in[K][N][4];
bool u[N][N], bad[N], inc[K][N];
int count_xor(unsigned long long (*a)[4], unsigned long long (*b)[4])
{
int s = 0;
for (int i = 0; i << 6 < m && s >> 1 <= x; ++i) {
s += __builtin_popcountll(a[i][0] ^ b[i][0]);
s += __builtin_popcountll(a[i][1] ^ b[i][1]);
s += __builtin_popcountll(a[i][2] ^ b[i][2]);
s += __builtin_popcountll(a[i][3] ^ b[i][3]);
}
return s >> 1;
}
void test(int p, int q)
{
if (u[p][q]) return;
u[p][q] = u[q][p] = true;
if (count_xor(a[p], a[q]) != x) bad[p] = bad[q] = 1;
}
bool subset_test(int v)
{
for (int i = 0; i < K; ++i) {
int total_d = 0;
for (int j = 0; j < m; ++j) for (int k = 0; k < 4; ++k) {
if (a[v][j >> 6][k] >> (j & 63) & 1) total_d += subset_size[i] - in[i][j][k];
else total_d += in[i][j][k];
}
if (total_d != (subset_size[i] - inc[i][v]) * x * 2) return false;
}
return true;
}
int main()
{
scanf("%d%d%d", &n, &m, &x);
std::iota(p, p + m, 0);
std::shuffle(p, p + m, rng);
for (int i = 0; i < n; ++i) {
getchar();
for (int j = 0; j < m; ++j) {
char ch = getchar();
int ind;
if (ch == 'A') ind = 0;
else if (ch == 'C') ind = 1;
else if (ch == 'G') ind = 2;
else ind = 3;
mask[i] |= 1 << ind;
a[i][p[j] >> 6][ind] |= (unsigned long long)1 << (p[j] & 63);
}
}
std::iota(ord, ord + n, 0);
std::shuffle(ord, ord + n, rng);
for (int i = 0; i < K; ++i) {
for (int j = 0; j < n; ++j) if (rng() & 1) {
++subset_size[i];
inc[i][j] = 1;
for (int k = 0; k < m; ++k) for (int l = 0; l < 4; ++l) in[i][k][l] += a[j][k >> 6][l] >> (k & 63) & 1;
}
}
for (int i = 0; i < n; ++i) if (!bad[ord[i]] && subset_test(ord[i])) {
for (int j = 0; j < n && !bad[ord[i]]; ++j) if (ord[j] != ord[i]) test(ord[i], ord[j]);
if (!bad[ord[i]]) {
printf("%d\n", ord[i] + 1);
return 0;
}
}
return 0;
}
Compilation message
genetics.cpp:10:28: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
10 | unsigned long long a[N][(N - 1 >> 6) + 1][4];
| ~~^~~
genetics.cpp: In function 'int main()':
genetics.cpp:48:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
48 | scanf("%d%d%d", &n, &m, &x);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
972 KB |
Output is correct |
2 |
Correct |
1 ms |
972 KB |
Output is correct |
3 |
Correct |
1 ms |
460 KB |
Output is correct |
4 |
Correct |
1 ms |
844 KB |
Output is correct |
5 |
Correct |
1 ms |
972 KB |
Output is correct |
6 |
Correct |
1 ms |
972 KB |
Output is correct |
7 |
Correct |
1 ms |
716 KB |
Output is correct |
8 |
Correct |
0 ms |
460 KB |
Output is correct |
9 |
Correct |
1 ms |
844 KB |
Output is correct |
10 |
Correct |
1 ms |
944 KB |
Output is correct |
11 |
Correct |
1 ms |
932 KB |
Output is correct |
12 |
Correct |
1 ms |
972 KB |
Output is correct |
13 |
Correct |
1 ms |
1068 KB |
Output is correct |
14 |
Correct |
1 ms |
972 KB |
Output is correct |
15 |
Correct |
1 ms |
972 KB |
Output is correct |
16 |
Correct |
1 ms |
972 KB |
Output is correct |
17 |
Correct |
1 ms |
460 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
159 ms |
11960 KB |
Output is correct |
2 |
Correct |
226 ms |
13776 KB |
Output is correct |
3 |
Correct |
186 ms |
13252 KB |
Output is correct |
4 |
Correct |
47 ms |
8132 KB |
Output is correct |
5 |
Correct |
234 ms |
13716 KB |
Output is correct |
6 |
Correct |
233 ms |
13816 KB |
Output is correct |
7 |
Correct |
90 ms |
6908 KB |
Output is correct |
8 |
Correct |
87 ms |
7132 KB |
Output is correct |
9 |
Correct |
179 ms |
13340 KB |
Output is correct |
10 |
Correct |
199 ms |
13380 KB |
Output is correct |
11 |
Correct |
164 ms |
12028 KB |
Output is correct |
12 |
Correct |
178 ms |
12096 KB |
Output is correct |
13 |
Correct |
169 ms |
11976 KB |
Output is correct |
14 |
Correct |
164 ms |
10704 KB |
Output is correct |
15 |
Correct |
148 ms |
10772 KB |
Output is correct |
16 |
Correct |
135 ms |
11748 KB |
Output is correct |
17 |
Correct |
229 ms |
13300 KB |
Output is correct |
18 |
Correct |
205 ms |
13164 KB |
Output is correct |
19 |
Correct |
194 ms |
13248 KB |
Output is correct |
20 |
Correct |
202 ms |
13272 KB |
Output is correct |
21 |
Correct |
193 ms |
13216 KB |
Output is correct |
22 |
Correct |
189 ms |
13260 KB |
Output is correct |
23 |
Correct |
185 ms |
13208 KB |
Output is correct |
24 |
Correct |
196 ms |
13240 KB |
Output is correct |
25 |
Correct |
217 ms |
13124 KB |
Output is correct |
26 |
Correct |
184 ms |
13312 KB |
Output is correct |
27 |
Correct |
187 ms |
13124 KB |
Output is correct |
28 |
Correct |
180 ms |
13156 KB |
Output is correct |
29 |
Correct |
195 ms |
13252 KB |
Output is correct |
30 |
Correct |
193 ms |
13780 KB |
Output is correct |
31 |
Correct |
190 ms |
13772 KB |
Output is correct |
32 |
Correct |
203 ms |
13800 KB |
Output is correct |
33 |
Correct |
1 ms |
460 KB |
Output is correct |
34 |
Correct |
1 ms |
972 KB |
Output is correct |
35 |
Correct |
1 ms |
424 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
159 ms |
11960 KB |
Output is correct |
2 |
Correct |
226 ms |
13776 KB |
Output is correct |
3 |
Correct |
186 ms |
13252 KB |
Output is correct |
4 |
Correct |
47 ms |
8132 KB |
Output is correct |
5 |
Correct |
234 ms |
13716 KB |
Output is correct |
6 |
Correct |
233 ms |
13816 KB |
Output is correct |
7 |
Correct |
90 ms |
6908 KB |
Output is correct |
8 |
Correct |
87 ms |
7132 KB |
Output is correct |
9 |
Correct |
179 ms |
13340 KB |
Output is correct |
10 |
Correct |
199 ms |
13380 KB |
Output is correct |
11 |
Correct |
164 ms |
12028 KB |
Output is correct |
12 |
Correct |
178 ms |
12096 KB |
Output is correct |
13 |
Correct |
169 ms |
11976 KB |
Output is correct |
14 |
Correct |
164 ms |
10704 KB |
Output is correct |
15 |
Correct |
148 ms |
10772 KB |
Output is correct |
16 |
Correct |
135 ms |
11748 KB |
Output is correct |
17 |
Correct |
229 ms |
13300 KB |
Output is correct |
18 |
Correct |
205 ms |
13164 KB |
Output is correct |
19 |
Correct |
194 ms |
13248 KB |
Output is correct |
20 |
Correct |
202 ms |
13272 KB |
Output is correct |
21 |
Correct |
193 ms |
13216 KB |
Output is correct |
22 |
Correct |
189 ms |
13260 KB |
Output is correct |
23 |
Correct |
185 ms |
13208 KB |
Output is correct |
24 |
Correct |
196 ms |
13240 KB |
Output is correct |
25 |
Correct |
217 ms |
13124 KB |
Output is correct |
26 |
Correct |
184 ms |
13312 KB |
Output is correct |
27 |
Correct |
187 ms |
13124 KB |
Output is correct |
28 |
Correct |
180 ms |
13156 KB |
Output is correct |
29 |
Correct |
195 ms |
13252 KB |
Output is correct |
30 |
Correct |
193 ms |
13780 KB |
Output is correct |
31 |
Correct |
190 ms |
13772 KB |
Output is correct |
32 |
Correct |
203 ms |
13800 KB |
Output is correct |
33 |
Correct |
1 ms |
460 KB |
Output is correct |
34 |
Correct |
1 ms |
972 KB |
Output is correct |
35 |
Correct |
1 ms |
424 KB |
Output is correct |
36 |
Correct |
952 ms |
25388 KB |
Output is correct |
37 |
Correct |
1063 ms |
27284 KB |
Output is correct |
38 |
Correct |
1158 ms |
27772 KB |
Output is correct |
39 |
Correct |
365 ms |
24004 KB |
Output is correct |
40 |
Correct |
972 ms |
27632 KB |
Output is correct |
41 |
Correct |
563 ms |
16012 KB |
Output is correct |
42 |
Correct |
561 ms |
16076 KB |
Output is correct |
43 |
Correct |
776 ms |
24508 KB |
Output is correct |
44 |
Correct |
998 ms |
28080 KB |
Output is correct |
45 |
Correct |
1073 ms |
28168 KB |
Output is correct |
46 |
Correct |
1039 ms |
28100 KB |
Output is correct |
47 |
Correct |
884 ms |
25284 KB |
Output is correct |
48 |
Correct |
940 ms |
25368 KB |
Output is correct |
49 |
Correct |
797 ms |
22212 KB |
Output is correct |
50 |
Correct |
800 ms |
22304 KB |
Output is correct |
51 |
Correct |
961 ms |
24520 KB |
Output is correct |
52 |
Correct |
993 ms |
27920 KB |
Output is correct |
53 |
Correct |
1047 ms |
27852 KB |
Output is correct |
54 |
Correct |
1014 ms |
27808 KB |
Output is correct |
55 |
Correct |
956 ms |
27904 KB |
Output is correct |
56 |
Correct |
1018 ms |
27876 KB |
Output is correct |
57 |
Correct |
988 ms |
27860 KB |
Output is correct |
58 |
Correct |
996 ms |
27972 KB |
Output is correct |
59 |
Correct |
989 ms |
41760 KB |
Output is correct |
60 |
Correct |
1016 ms |
41928 KB |
Output is correct |
61 |
Correct |
1045 ms |
41652 KB |
Output is correct |
62 |
Correct |
1092 ms |
41684 KB |
Output is correct |
63 |
Correct |
960 ms |
41848 KB |
Output is correct |
64 |
Correct |
943 ms |
41840 KB |
Output is correct |
65 |
Correct |
1020 ms |
41800 KB |
Output is correct |
66 |
Correct |
990 ms |
41768 KB |
Output is correct |
67 |
Correct |
1004 ms |
41964 KB |
Output is correct |
68 |
Correct |
961 ms |
41904 KB |
Output is correct |
69 |
Correct |
1008 ms |
41736 KB |
Output is correct |
70 |
Correct |
1087 ms |
41804 KB |
Output is correct |
71 |
Correct |
963 ms |
41804 KB |
Output is correct |
72 |
Correct |
1022 ms |
42048 KB |
Output is correct |
73 |
Correct |
1120 ms |
41704 KB |
Output is correct |
74 |
Correct |
1 ms |
460 KB |
Output is correct |
75 |
Correct |
1 ms |
972 KB |
Output is correct |
76 |
Correct |
1 ms |
460 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
972 KB |
Output is correct |
2 |
Correct |
1 ms |
972 KB |
Output is correct |
3 |
Correct |
1 ms |
460 KB |
Output is correct |
4 |
Correct |
1 ms |
844 KB |
Output is correct |
5 |
Correct |
1 ms |
972 KB |
Output is correct |
6 |
Correct |
1 ms |
972 KB |
Output is correct |
7 |
Correct |
1 ms |
716 KB |
Output is correct |
8 |
Correct |
0 ms |
460 KB |
Output is correct |
9 |
Correct |
1 ms |
844 KB |
Output is correct |
10 |
Correct |
1 ms |
944 KB |
Output is correct |
11 |
Correct |
1 ms |
932 KB |
Output is correct |
12 |
Correct |
1 ms |
972 KB |
Output is correct |
13 |
Correct |
1 ms |
1068 KB |
Output is correct |
14 |
Correct |
1 ms |
972 KB |
Output is correct |
15 |
Correct |
1 ms |
972 KB |
Output is correct |
16 |
Correct |
1 ms |
972 KB |
Output is correct |
17 |
Correct |
1 ms |
460 KB |
Output is correct |
18 |
Correct |
159 ms |
11960 KB |
Output is correct |
19 |
Correct |
226 ms |
13776 KB |
Output is correct |
20 |
Correct |
186 ms |
13252 KB |
Output is correct |
21 |
Correct |
47 ms |
8132 KB |
Output is correct |
22 |
Correct |
234 ms |
13716 KB |
Output is correct |
23 |
Correct |
233 ms |
13816 KB |
Output is correct |
24 |
Correct |
90 ms |
6908 KB |
Output is correct |
25 |
Correct |
87 ms |
7132 KB |
Output is correct |
26 |
Correct |
179 ms |
13340 KB |
Output is correct |
27 |
Correct |
199 ms |
13380 KB |
Output is correct |
28 |
Correct |
164 ms |
12028 KB |
Output is correct |
29 |
Correct |
178 ms |
12096 KB |
Output is correct |
30 |
Correct |
169 ms |
11976 KB |
Output is correct |
31 |
Correct |
164 ms |
10704 KB |
Output is correct |
32 |
Correct |
148 ms |
10772 KB |
Output is correct |
33 |
Correct |
135 ms |
11748 KB |
Output is correct |
34 |
Correct |
229 ms |
13300 KB |
Output is correct |
35 |
Correct |
205 ms |
13164 KB |
Output is correct |
36 |
Correct |
194 ms |
13248 KB |
Output is correct |
37 |
Correct |
202 ms |
13272 KB |
Output is correct |
38 |
Correct |
193 ms |
13216 KB |
Output is correct |
39 |
Correct |
189 ms |
13260 KB |
Output is correct |
40 |
Correct |
185 ms |
13208 KB |
Output is correct |
41 |
Correct |
196 ms |
13240 KB |
Output is correct |
42 |
Correct |
217 ms |
13124 KB |
Output is correct |
43 |
Correct |
184 ms |
13312 KB |
Output is correct |
44 |
Correct |
187 ms |
13124 KB |
Output is correct |
45 |
Correct |
180 ms |
13156 KB |
Output is correct |
46 |
Correct |
195 ms |
13252 KB |
Output is correct |
47 |
Correct |
193 ms |
13780 KB |
Output is correct |
48 |
Correct |
190 ms |
13772 KB |
Output is correct |
49 |
Correct |
203 ms |
13800 KB |
Output is correct |
50 |
Correct |
1 ms |
460 KB |
Output is correct |
51 |
Correct |
1 ms |
972 KB |
Output is correct |
52 |
Correct |
1 ms |
424 KB |
Output is correct |
53 |
Correct |
952 ms |
25388 KB |
Output is correct |
54 |
Correct |
1063 ms |
27284 KB |
Output is correct |
55 |
Correct |
1158 ms |
27772 KB |
Output is correct |
56 |
Correct |
365 ms |
24004 KB |
Output is correct |
57 |
Correct |
972 ms |
27632 KB |
Output is correct |
58 |
Correct |
563 ms |
16012 KB |
Output is correct |
59 |
Correct |
561 ms |
16076 KB |
Output is correct |
60 |
Correct |
776 ms |
24508 KB |
Output is correct |
61 |
Correct |
998 ms |
28080 KB |
Output is correct |
62 |
Correct |
1073 ms |
28168 KB |
Output is correct |
63 |
Correct |
1039 ms |
28100 KB |
Output is correct |
64 |
Correct |
884 ms |
25284 KB |
Output is correct |
65 |
Correct |
940 ms |
25368 KB |
Output is correct |
66 |
Correct |
797 ms |
22212 KB |
Output is correct |
67 |
Correct |
800 ms |
22304 KB |
Output is correct |
68 |
Correct |
961 ms |
24520 KB |
Output is correct |
69 |
Correct |
993 ms |
27920 KB |
Output is correct |
70 |
Correct |
1047 ms |
27852 KB |
Output is correct |
71 |
Correct |
1014 ms |
27808 KB |
Output is correct |
72 |
Correct |
956 ms |
27904 KB |
Output is correct |
73 |
Correct |
1018 ms |
27876 KB |
Output is correct |
74 |
Correct |
988 ms |
27860 KB |
Output is correct |
75 |
Correct |
996 ms |
27972 KB |
Output is correct |
76 |
Correct |
989 ms |
41760 KB |
Output is correct |
77 |
Correct |
1016 ms |
41928 KB |
Output is correct |
78 |
Correct |
1045 ms |
41652 KB |
Output is correct |
79 |
Correct |
1092 ms |
41684 KB |
Output is correct |
80 |
Correct |
960 ms |
41848 KB |
Output is correct |
81 |
Correct |
943 ms |
41840 KB |
Output is correct |
82 |
Correct |
1020 ms |
41800 KB |
Output is correct |
83 |
Correct |
990 ms |
41768 KB |
Output is correct |
84 |
Correct |
1004 ms |
41964 KB |
Output is correct |
85 |
Correct |
961 ms |
41904 KB |
Output is correct |
86 |
Correct |
1008 ms |
41736 KB |
Output is correct |
87 |
Correct |
1087 ms |
41804 KB |
Output is correct |
88 |
Correct |
963 ms |
41804 KB |
Output is correct |
89 |
Correct |
1022 ms |
42048 KB |
Output is correct |
90 |
Correct |
1120 ms |
41704 KB |
Output is correct |
91 |
Correct |
1 ms |
460 KB |
Output is correct |
92 |
Correct |
1 ms |
972 KB |
Output is correct |
93 |
Correct |
1 ms |
460 KB |
Output is correct |
94 |
Correct |
1014 ms |
40648 KB |
Output is correct |
95 |
Correct |
1102 ms |
42932 KB |
Output is correct |
96 |
Correct |
1210 ms |
42212 KB |
Output is correct |
97 |
Correct |
563 ms |
23736 KB |
Output is correct |
98 |
Correct |
406 ms |
27808 KB |
Output is correct |
99 |
Correct |
1157 ms |
42856 KB |
Output is correct |
100 |
Correct |
486 ms |
22172 KB |
Output is correct |
101 |
Correct |
534 ms |
22200 KB |
Output is correct |
102 |
Correct |
762 ms |
34088 KB |
Output is correct |
103 |
Correct |
1068 ms |
42848 KB |
Output is correct |
104 |
Correct |
1046 ms |
42836 KB |
Output is correct |
105 |
Correct |
1064 ms |
42840 KB |
Output is correct |
106 |
Correct |
1107 ms |
40684 KB |
Output is correct |
107 |
Correct |
990 ms |
37896 KB |
Output is correct |
108 |
Correct |
810 ms |
32656 KB |
Output is correct |
109 |
Correct |
1028 ms |
37120 KB |
Output is correct |
110 |
Correct |
907 ms |
36092 KB |
Output is correct |
111 |
Correct |
1136 ms |
42840 KB |
Output is correct |
112 |
Correct |
1490 ms |
42264 KB |
Output is correct |
113 |
Correct |
1006 ms |
41484 KB |
Output is correct |
114 |
Correct |
955 ms |
41480 KB |
Output is correct |
115 |
Correct |
1025 ms |
41452 KB |
Output is correct |
116 |
Correct |
1048 ms |
42248 KB |
Output is correct |
117 |
Correct |
1018 ms |
42352 KB |
Output is correct |
118 |
Correct |
1076 ms |
42344 KB |
Output is correct |
119 |
Correct |
957 ms |
42208 KB |
Output is correct |
120 |
Correct |
1296 ms |
42348 KB |
Output is correct |
121 |
Correct |
925 ms |
37872 KB |
Output is correct |
122 |
Correct |
1172 ms |
43040 KB |
Output is correct |
123 |
Correct |
1135 ms |
41876 KB |
Output is correct |
124 |
Correct |
1 ms |
460 KB |
Output is correct |
125 |
Correct |
1 ms |
972 KB |
Output is correct |
126 |
Correct |
1 ms |
460 KB |
Output is correct |