Skip to content

Commit 653f5e7

Browse files
cses 5
1 parent 0cafca1 commit 653f5e7

File tree

3 files changed

+108
-40
lines changed

3 files changed

+108
-40
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -548,5 +548,6 @@ Solutions to [CSES Problem Set](https://cses.fi/problemset/).
548548
| Missing Number | Basic Arrays |
549549
| Repetitions | Maximum length substring with same characters |
550550
| Increasing Array | Greedy |
551+
| Permutations | Ad Hoc, Construction |
551552

552553
[Solutions Folder](cses)

cses/5 - Permutations.cpp

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <utility>
4+
#include <sstream>
5+
#include <algorithm>
6+
#include <stack>
7+
#include <vector>
8+
#include <queue>
9+
#include <map>
10+
#include <set>
11+
#include <bitset>
12+
#include <cmath>
13+
#include <cstring>
14+
#include <iomanip>
15+
#include <fstream>
16+
#include <cassert>
17+
#include <unordered_set>
18+
#include <ctime>
19+
#include <list>
20+
21+
using namespace std;
22+
23+
template<class T> using min_heap = priority_queue<T, vector<T>, greater<T>>;
24+
25+
#define FOR(i, a, b) for (int i=a; i<(b); i++)
26+
#define F0R(i, a) for (int i=0; i<(a); i++)
27+
#define F0R1(i, a) for (int i=1; i<=(a); i++)
28+
#define FORd(i, a, b) for (int i = (b)-1; i >= a; i--)
29+
#define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--)
30+
#define F0Rd1(i, a) for (int i=a; i>0; i--)
31+
#define SORT(vec) sort(vec.begin(), vec.end())
32+
#define MIN(a, b) a = min(a, b)
33+
#define MAX(a, b) a = max(a, b)
34+
35+
#define INF 1000000010
36+
#define LL_INF 4500000000000000000
37+
#define LSOne(S) (S & (-S))
38+
#define EPS 1e-9
39+
#define pA first
40+
#define pB second
41+
#define mp make_pair
42+
#define pb push_back
43+
#define PI acos(-1.0)
44+
#define ll long long
45+
#define MOD (int)(2e+9+11)
46+
#define SET(vec, val, size) for (int i = 0; i < size; i++) vec[i] = val;
47+
#define SET2D(arr, val, dim1, dim2) F0R(i, dim1) F0R(j, dim2) arr[i][j] = val;
48+
#define SET3D(arr, val, dim1, dim2, dim3) F0R(i, dim1) F0R(j, dim2) F0R(k, dim3) arr[i][j][k] = val;
49+
#define SET4D(arr, val, dim1, dim2, dim3, dim4) F0R(i, dim1) F0R(j, dim2) F0R(k, dim3) F0R(l, dim4) arr[i][j][k][l] = val;
50+
#define READGRID(arr, dim) F0R(i, dim) F0R(j, dim) cin >> arr[i][j];
51+
#define all(x) (x).begin(), (x).end()
52+
53+
typedef pair<int, int> ii;
54+
typedef pair<int, ii> iii;
55+
typedef pair<ll, ll> pll;
56+
typedef vector<int> vi;
57+
typedef vector<ii> vii;
58+
typedef vector<iii> viii;
59+
typedef vector<ll> vl;
60+
61+
void setupIO(const string &PROB) {
62+
ios::sync_with_stdio(false);
63+
cin.tie(nullptr);
64+
ifstream infile(PROB + ".in");
65+
if (infile.good()) {
66+
freopen((PROB + ".in").c_str(), "r", stdin);
67+
freopen((PROB + ".out").c_str(), "w", stdout);
68+
}
69+
}
70+
71+
/* ============================ */
72+
73+
int main() {
74+
int n; cin >> n;
75+
if (n == 1) cout << 1 << endl;
76+
else if (n < 4) cout << "NO SOLUTION" << endl;
77+
else {
78+
vi toPrint;
79+
F0R1(i, n) {
80+
if (i & 1) continue;
81+
toPrint.pb(i);
82+
}
83+
F0R1(i, n) {
84+
if (!(i & 1)) continue;
85+
toPrint.pb(i);
86+
}
87+
cout << toPrint[0];
88+
FOR(i, 1, toPrint.size()) cout << " " << toPrint[i];
89+
cout << endl;
90+
}
91+
92+
return 0;
93+
}

main.cpp

+14-40
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
/*
2-
ID: nathan.18
3-
TASK: hidden
4-
LANG: C++
5-
*/
6-
71
#include <iostream>
82
#include <string>
93
#include <utility>
@@ -77,43 +71,23 @@ void setupIO(const string &PROB) {
7771
/* ============================ */
7872

7973
int main() {
80-
setupIO("hidden");
81-
8274
int n; cin >> n;
83-
char A[n]; F0R(i, n) cin >> A[i];
84-
85-
vi alive;
86-
F0R(i, n) alive.pb(i);
87-
bool ignore[n]; SET(ignore, false, n);
88-
89-
int ct = 0;
90-
int aliveLeft = n;
91-
while (alive.size() != 1) {
92-
char best = '{';
93-
vi keep;
94-
for (int x : alive) {
95-
if (ignore[x]) continue;
96-
97-
if (A[(x + ct) % n] < best) {
98-
best = A[(x + ct) % n];
99-
keep.clear();
100-
keep.pb(x);
101-
} else if (A[(x + ct) % n] == best) {
102-
keep.pb(x);
103-
}
75+
if (n == 1) cout << 1 << endl;
76+
else if (n < 4) cout << "NO SOLUTION" << endl;
77+
else {
78+
vi toPrint;
79+
F0R1(i, n) {
80+
if (i & 1) continue;
81+
toPrint.pb(i);
10482
}
105-
ct++;
106-
for (int x : keep) {
107-
if (aliveLeft == 1) break;
108-
if (!ignore[(x + ct) % n]) {
109-
ignore[(x + ct) % n] = true;
110-
aliveLeft--;
111-
}
83+
F0R1(i, n) {
84+
if (!(i & 1)) continue;
85+
toPrint.pb(i);
11286
}
113-
alive = keep;
87+
cout << toPrint[0];
88+
FOR(i, 1, toPrint.size()) cout << " " << toPrint[i];
89+
cout << endl;
11490
}
11591

116-
cout << alive[0] << endl;
117-
11892
return 0;
119-
}
93+
}

0 commit comments

Comments
 (0)