Skip to content

Commit 01fe4b2

Browse files
committed
added coin grid, school excursion, sorting methods
1 parent 137c529 commit 01fe4b2

4 files changed

+237
-3
lines changed

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -203,15 +203,15 @@
203203
* [1086 - Writing Numbers](src/1086%20-%20Writing%20Numbers.cpp)
204204
* 1113 - String Transform
205205
* [1147 - Maximum Building I](src/1147%20-%20Maximum%20Building%20I.cpp)
206-
* 1162 - Sorting Methods
206+
* [1162 - Sorting Methods](src/1162%20-%20Sorting%20Methods.cpp)
207207
* 1191 - Cyclic Array
208208
* 1189 - Food Division
209209
* [1654 - Bit Problem](src/1654%20-%20Bit%20Problem.cpp)
210210
* 1698 - Swap Round Sorting
211211
* [1700 - Tree Isomorphism I](src/1700%20-%20Tree%20Isomorphism%20I.cpp)
212212
* 1703 - Critical Cities
213-
* 1706 - School Excursion
214-
* 1709 - Coin Grid
213+
* [1706 - School Excursion](src/1706%20-%20School%20Excursion.cpp)
214+
* [1709 - Coin Grid](src/1709%20-%20Coin%20Grid.cpp)
215215
* 1742 - Robot Path
216216
* 1757 - Course Schedule II
217217
* 1080 - Empty String

src/1162 - Sorting Methods.cpp

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
Problem Name: Sorting Methods
3+
Problem Link: https://cses.fi/problemset/task/1162
4+
Author: Sachin Srivastava (mrsac7)
5+
*/
6+
#include<bits/stdc++.h>
7+
using namespace std;
8+
9+
#define int long long
10+
#define endl '\n'
11+
12+
const int mxN = 2e5+5;
13+
int bit[mxN];
14+
void upd(int k) {
15+
for (; k < mxN; k += k&-k)
16+
bit[k]++;
17+
}
18+
int qry(int k) {
19+
int ans = 0;
20+
for (; k > 0; k -= k&-k)
21+
ans += bit[k];
22+
return ans;
23+
}
24+
vector<int> adj[mxN];
25+
int c = 0;
26+
bool vis[mxN];
27+
void dfs(int s){
28+
if (vis[s]) return;
29+
vis[s]=1; c++;
30+
for (auto i: adj[s]) dfs(i);
31+
}
32+
int ind[mxN];
33+
signed main(){
34+
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
35+
#ifdef LOCAL
36+
freopen("input.txt", "r" , stdin);
37+
freopen("output.txt", "w", stdout);
38+
#endif
39+
40+
int n; cin>>n;
41+
int a[n];
42+
int ans1 = 0, ans2 = 0, ans3 = n, ans4 = n;
43+
int mx = 0;
44+
for (int i = 0; i < n; i++) {
45+
cin>>a[i];
46+
ans1 += qry(mxN) - qry(a[i]);
47+
upd(a[i]);
48+
if (i+1 != a[i]) {
49+
adj[i+1].push_back(a[i]),
50+
adj[a[i]].push_back(i+1);
51+
}
52+
int it = upper_bound(ind, ind+mx+1, a[i]) - ind;
53+
mx = max(mx, it);
54+
ind[it] = a[i];
55+
}
56+
ans3 = n-mx;
57+
for (int i = 1; i <= n; i++) {
58+
if (!vis[i]) {
59+
c = 0; dfs(i);
60+
ans2 += c-1;
61+
}
62+
}
63+
for (int i = n-1; i >= 0; i--) {
64+
if (a[i] == ans4)
65+
ans4--;
66+
}
67+
cout<<ans1<<' '<<ans2<<' '<<ans3<<' '<<ans4;
68+
}

src/1706 - School Excursion.cpp

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
Problem Name: School Excursion
3+
Problem Link: https://cses.fi/problemset/task/1706
4+
Author: Sachin Srivastava (mrsac7)
5+
*/
6+
#include<bits/stdc++.h>
7+
using namespace std;
8+
9+
#define int long long
10+
#define endl '\n'
11+
12+
const int mxN = 1e5+5;
13+
int c = 0;
14+
vector<int> adj[mxN];
15+
bool vis[mxN];
16+
void dfs(int s){
17+
if (vis[s]) return;
18+
vis[s]=1; c++;
19+
for (auto i: adj[s]) dfs(i);
20+
}
21+
int dp[mxN];
22+
map<int,int> mp;
23+
signed main(){
24+
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
25+
#ifdef LOCAL
26+
freopen("input.txt", "r" , stdin);
27+
freopen("output.txt", "w", stdout);
28+
#endif
29+
30+
int n, m; cin>>n>>m;
31+
for (int i = 0; i < m; i++) {
32+
int x,y; cin>>x>>y;
33+
adj[x].push_back(y);
34+
adj[y].push_back(x);
35+
}
36+
37+
for (int i = 0; i < n; i++) {
38+
if (!vis[i+1]) {
39+
c = 0;
40+
dfs(i+1);
41+
mp[c]++;
42+
}
43+
}
44+
vector<int> v;
45+
for (auto [i, c]: mp) {
46+
int x = 0;
47+
while(1<<x < c) {
48+
v.push_back((1<<x)*i);
49+
c -= 1<<x;
50+
x++;
51+
}
52+
if (c)
53+
v.push_back(c*i);
54+
}
55+
m = v.size();
56+
dp[0] = 1;
57+
for (int i = 0; i < m; i++) {
58+
for (int j = n; j >= 1; j--) {
59+
if (j >= v[i]) {
60+
dp[j] = max(dp[j-v[i]], dp[j]);
61+
}
62+
}
63+
}
64+
for (int i = 1; i <= n; i++)
65+
cout<<dp[i];
66+
}

src/1709 - Coin Grid.cpp

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*
2+
Problem Name: Coin Grid
3+
Problem Link: https://cses.fi/problemset/task/1709
4+
Author: Sachin Srivastava (mrsac7)
5+
*/
6+
#include<bits/stdc++.h>
7+
using namespace std;
8+
9+
#define int long long
10+
#define endl '\n'
11+
12+
const int mxN = 205;
13+
const int INF = 1LL<<60;
14+
vector<tuple<int,int,int>> adj[mxN];
15+
bool vis[mxN];
16+
int dfs(int s, int f) {
17+
if (s == 201)
18+
return f;
19+
vis[s] = 1;
20+
for (auto &[i, w, j]: adj[s]) {
21+
if (w >= 1 && !vis[i]) {
22+
int b = dfs(i, 1);
23+
if (b > 0) {
24+
w -= b;
25+
get<1>(adj[i][j])+=b;
26+
return b;
27+
}
28+
}
29+
}
30+
return 0;
31+
}
32+
set<int> adj2[mxN];
33+
void dfs(int s){
34+
if (vis[s]) return;
35+
vis[s] = 1;
36+
for (auto i: adj2[s]) dfs(i);
37+
}
38+
signed main(){
39+
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
40+
#ifdef LOCAL
41+
freopen("input.txt", "r" , stdin);
42+
freopen("output.txt", "w", stdout);
43+
#endif
44+
45+
int n; cin>>n;
46+
for (int i = 1; i <= n; i++) {
47+
for (int j = 1; j <=n; j++) {
48+
char x; cin>>x;
49+
if (x != '.') {
50+
int j1 = adj[100+j].size();
51+
int j2 = adj[i].size();
52+
adj[i].push_back({100+j, 1, j1});
53+
adj[100+j].push_back({i, 0, j2});
54+
adj2[i].insert(100+j);
55+
}
56+
}
57+
}
58+
for (int i = 1; i <= 100; i++) {
59+
int j1 = adj[i].size();
60+
int j2 = adj[0].size();
61+
adj[0].push_back({i, 1, j1});
62+
adj[i].push_back({0, 0, j2});
63+
j1 = adj[201].size();
64+
j2 = adj[100+i].size();
65+
adj[100+i].push_back({201, 1, j1});
66+
adj[201].push_back({100+i, 0, j2});
67+
}
68+
int ans = 0;
69+
while(1) {
70+
memset(vis, 0, sizeof vis);
71+
int f = dfs(0, INF);
72+
ans += f;
73+
if (!f)
74+
break;
75+
}
76+
cout<<ans<<endl;
77+
int k = 0;
78+
set<int> st;
79+
for (int i = 1; i <= 100; i++) {
80+
st.insert(i);
81+
for (auto [s, w, j]: adj[i]) {
82+
if (w == 0 && s>100) {
83+
adj2[i].erase(s);
84+
adj2[s].insert(i);
85+
st.erase(i);
86+
}
87+
}
88+
}
89+
memset(vis, 0, sizeof vis);
90+
for (auto i: st) {
91+
if (!vis[i])
92+
dfs(i);
93+
}
94+
for (int i = 1; i <= n; i++) {
95+
if (!vis[i])
96+
cout<<1<<' '<<i<<endl;
97+
if (vis[100+i])
98+
cout<<2<<' '<<i<<endl;
99+
}
100+
}

0 commit comments

Comments
 (0)