-
Notifications
You must be signed in to change notification settings - Fork 186
Expand file tree
/
Copy pathwaiter.cc
More file actions
62 lines (56 loc) · 963 Bytes
/
waiter.cc
File metadata and controls
62 lines (56 loc) · 963 Bytes
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
57
58
59
60
61
62
// https://www.hackerrank.com/challenges/waiter
#include <cmath>
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
typedef stack<int> si;
typedef vector<si> vsi;
int primes[1201];
bool is_prime(int x) {
for (int i = 2; i <= int(sqrt(x)); i++) {
if ((x % i) == 0) return false;
}
return true;
}
void calc_primes(int q) {
primes[0] = 2;
primes[1] = 3;
int c = 2;
for (int i = 5; c < q; i++) {
if (is_prime(i)) {
primes[c] = i;
c++;
}
}
}
int main() {
int n, q;
cin >> n >> q;
calc_primes(q);
vsi v(q + 2);
while (n--) {
int x;
cin >> x;
v[q].push(x);
}
for (int i = 0; i < q; i++) {
int k = q + (i % 2);
int k2 = q + (i % 2 == 0);
while (!v[k].empty()) {
int x = v[k].top();
v[k].pop();
if (x % primes[i]) {
v[k2].push(x);
} else {
v[i].push(x);
}
}
}
for (int i = 0; i < q + 2; i++) {
while (!v[i].empty()) {
cout << v[i].top() << endl;
v[i].pop();
}
}
}