#include <bitset>
#include <cstdio>
#include <list>
#include <vector>
const int BITSET_SIZE = 50000;
struct Tuple { int a, b, c=0; };
int main() {
int n, s;
scanf("%d%d", &n, &s);
std::vector<std::bitset<BITSET_SIZE>> X(n + 1);
for (int k=1; k<=n; ++k) {
X[k].reset();
for (int j=k; j<=n; j+=k) {
X[k].set(j - 1);
}
}
std::bitset<BITSET_SIZE> Y, Z;
Y.reset(); Z.reset();
for (int i=0; i<s; ++i) {
int b;
scanf("%d", &b);
Z.set(b - 1);
}
int m = n;
std::list<Tuple> tuples;
tuples.push_back({3, 1}); ++m;
for (int k=1; k<=n; ++k) {
if (Y[k-1] != Z[k-1]) {
if (Z[k-1]) {
tuples.push_back({1, m, k});
Y |= X[k];
++m;
} else {
tuples.push_back({3, k});
tuples.push_back({2, m, m+1});
m += 2;
Y &= ~X[k];
}
}
}
printf("%d\n", (int) tuples.size());
for (auto t : tuples) {
if (t.c) {
printf("%d %d %d\n", t.a, t.b, t.c);
} else {
printf("%d %d\n", t.a, t.b);
}
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <bitset> #include <cstdio> #include <list> #include <vector> const int BITSET_SIZE = 50000; struct Tuple { int a, b, c=0; }; int main() { int n, s; scanf("%d%d", &n, &s); std::vector<std::bitset<BITSET_SIZE>> X(n + 1); for (int k=1; k<=n; ++k) { X[k].reset(); for (int j=k; j<=n; j+=k) { X[k].set(j - 1); } } std::bitset<BITSET_SIZE> Y, Z; Y.reset(); Z.reset(); for (int i=0; i<s; ++i) { int b; scanf("%d", &b); Z.set(b - 1); } int m = n; std::list<Tuple> tuples; tuples.push_back({3, 1}); ++m; for (int k=1; k<=n; ++k) { if (Y[k-1] != Z[k-1]) { if (Z[k-1]) { tuples.push_back({1, m, k}); Y |= X[k]; ++m; } else { tuples.push_back({3, k}); tuples.push_back({2, m, m+1}); m += 2; Y &= ~X[k]; } } } printf("%d\n", (int) tuples.size()); for (auto t : tuples) { if (t.c) { printf("%d %d %d\n", t.a, t.b, t.c); } else { printf("%d %d\n", t.a, t.b); } } return 0; } |
English