Skip to content

Commit 7bf7ccd

Browse files
committed
Init commit
0 parents  commit 7bf7ccd

32 files changed

+1527
-0
lines changed

Timus/1067.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#include <iostream>
2+
#include <map>
3+
#include <algorithm>
4+
#include <vector>
5+
#include <sstream>
6+
7+
using namespace std;
8+
9+
class Directory {
10+
11+
public:
12+
13+
map<string, Directory*> children;
14+
15+
Directory() {
16+
17+
}
18+
19+
Directory* make_dir(string dir_name) {
20+
if (children.find(dir_name) == children.end()) {
21+
children[dir_name] = new Directory();
22+
}
23+
return children[dir_name];
24+
}
25+
26+
void display_hierarchy(string indentation, bool is_root) {
27+
if(!is_root)
28+
indentation += " ";
29+
for (auto& child : children) {
30+
cout << indentation << child.first << endl;
31+
child.second->display_hierarchy(indentation, false);
32+
}
33+
34+
}
35+
36+
};
37+
38+
int main()
39+
{
40+
int n;
41+
42+
cin >> n;
43+
44+
Directory* root_dir = new Directory();
45+
char separator = '\\';
46+
Directory* current_dir;
47+
48+
for (int i = 0; i < n; i++) {
49+
string current;
50+
vector<string> parsed_path;
51+
52+
current_dir = root_dir;
53+
cin >> current;
54+
replace(current.begin(), current.end(), separator, ' ');
55+
stringstream ss(current);
56+
string tmp;
57+
while (ss >> tmp)
58+
parsed_path.push_back(tmp);
59+
60+
for (string parsed_dir : parsed_path) {
61+
current_dir = current_dir->make_dir(parsed_dir);
62+
}
63+
}
64+
root_dir->display_hierarchy("", true);
65+
delete current_dir;
66+
delete root_dir;
67+
return 0;
68+
}

Timus/1207.cpp

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#include <iostream>
2+
#include <cmath>
3+
#include <map>
4+
#include <algorithm>
5+
#define PI 3.1415926535897932384626433832795028841971693993751058
6+
7+
using namespace std;
8+
9+
10+
void merge(double * a, double * aux, int l, int m, int r) {
11+
int i = l;
12+
int j = m + 1;
13+
// for (int k = l; k <= r; ++k) {
14+
// aux[k] = a[k];
15+
16+
// }
17+
for (int k = l; k <= r; ++k) {
18+
if (i > m) {
19+
a[k] = aux[j++];
20+
continue;
21+
}
22+
if (j > r) {
23+
a[k] = aux[i++];
24+
continue;
25+
}
26+
if (aux[j] < aux[i]) {
27+
a[k] = aux[j++];
28+
}
29+
else {
30+
a[k] = aux[i++];
31+
}
32+
}
33+
}
34+
35+
36+
void merge_sort(double * a, double * aux, int l, int r) {
37+
if (l < r) {
38+
int m = (l + r) / 2;
39+
merge_sort(aux, a, l, m);
40+
merge_sort(aux, a, m + 1, r);
41+
merge(a, aux, l, m, r);
42+
}
43+
}
44+
45+
void _sort(double* a, int N) {
46+
double* aux = new double[N];
47+
for (int k = 0; k < N; ++k) {
48+
aux[k] = a[k];
49+
}
50+
merge_sort(a, aux, 0, N-1);
51+
delete[] aux;
52+
}
53+
54+
int main()
55+
{
56+
int n;
57+
cin >> n;
58+
int dots[n][2];
59+
int min_x = 1000001;
60+
int min_y = 1000001;
61+
int min_dot_idx = -1;
62+
int min_dot[1][2];
63+
double atans[n];
64+
double atans_copy[n];
65+
66+
for (int i = 0; i< n; i++) {
67+
cin >> dots[i][0] >> dots[i][1];
68+
}
69+
70+
for (int i = 0; i < n; i++) {
71+
if (dots[i][1] < min_y || dots[i][1] == min_y && dots[i][0] < min_x) {
72+
min_dot_idx = i;
73+
min_x = dots[i][0];
74+
min_y = dots[i][1];
75+
}
76+
}
77+
78+
min_dot[0][0] = dots[min_dot_idx][0];
79+
min_dot[0][1] = dots[min_dot_idx][1];
80+
81+
82+
for (int i = 0; i < n; i++) {
83+
double current_atan;
84+
if (dots[i][0] == min_dot[0][0])
85+
current_atan = PI / 2;
86+
else if (dots[i][1] == min_dot[0][1])
87+
current_atan = 0;
88+
89+
else current_atan = atan((double) (dots[i][1] - min_dot[0][1]) / (double) (dots[i][0] - min_dot[0][0]));
90+
if (current_atan < 0) current_atan += 2 * PI;
91+
atans[i] = current_atan;
92+
atans_copy[i]=current_atan;
93+
}
94+
95+
swap(atans[n-1], atans[min_dot_idx]);
96+
97+
98+
_sort(atans, n-1);
99+
100+
101+
cout << min_dot_idx + 1 << " ";
102+
for(int i = 0; i < n; i++) {
103+
if (atans_copy[i] == atans[(n-1)/2]) {
104+
cout << i+1 << endl;
105+
break;
106+
}
107+
}
108+
109+
return 0;
110+
}

Timus/1296.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include <iostream>
2+
3+
using namespace std;
4+
5+
int main()
6+
{
7+
int n;
8+
cin >> n;
9+
int sequence[n];
10+
int currentSum = 0;
11+
int maxSum = currentSum;
12+
for (int i = 0; i < n; i++) {
13+
cin >> sequence[i];
14+
}
15+
for (int i = 0; i < n; i++) {
16+
currentSum += sequence[i];
17+
if (currentSum <= 0)
18+
currentSum = 0;
19+
else if (currentSum > maxSum) maxSum = currentSum;
20+
}
21+
cout << maxSum << endl;
22+
return 0;
23+
}

Timus/1450.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <queue>
4+
5+
using namespace std;
6+
7+
int min_dist = -2147483647;
8+
9+
class Wire {
10+
public:
11+
int from, to, benefit;
12+
13+
Wire(int from, int to, int benefit) {
14+
this->from = from;
15+
this->to = to;
16+
this->benefit = benefit;
17+
}
18+
19+
Wire() {
20+
21+
}
22+
};
23+
24+
int main()
25+
{
26+
int n,m,s,f;
27+
28+
cin >> n >> m;
29+
30+
Wire* wire_array[m];
31+
32+
for (int i = 0; i < m; i++) {
33+
int a,b,c;
34+
cin >> a >> b >> c;
35+
wire_array[i] = new Wire(a,b,c);
36+
}
37+
38+
cin >> s >> f;
39+
40+
vector<int> path_dijkstra(n+1, min_dist);
41+
42+
path_dijkstra[s] = 0;
43+
for (int i = 1; i < n; i++) {
44+
for (int j = 0; j < m; j++) {
45+
if (path_dijkstra[wire_array[j]->from] != min_dist && path_dijkstra[wire_array[j]->to] < wire_array[j]->benefit + path_dijkstra[wire_array[j]->from]) {
46+
path_dijkstra[wire_array[j]->to] = path_dijkstra[wire_array[j]->from] + wire_array[j]->benefit;
47+
}
48+
}
49+
}
50+
51+
if (path_dijkstra[f] > min_dist)
52+
cout << path_dijkstra[f] << endl;
53+
else cout << "No solution";
54+
55+
return 0;
56+
}

Timus/1494.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#include <iostream>
2+
#include <vector>
3+
4+
using namespace std;
5+
6+
int main()
7+
{
8+
int n;
9+
10+
cin >> n;
11+
12+
int pulled[n];
13+
14+
vector<int> rolled;
15+
16+
for (int i = 0; i < n; i++) {
17+
cin >> pulled[i];
18+
}
19+
20+
int max_pulled = 0;
21+
22+
for (int i = 0; i < n; i++) {
23+
if (pulled[i] > max_pulled) {
24+
for (int j = max_pulled + 1; j < pulled[i]; j++)
25+
rolled.push_back(j);
26+
max_pulled = pulled[i];
27+
} else {
28+
if (pulled[i] == rolled.back()) {
29+
rolled.pop_back();
30+
continue;
31+
}
32+
33+
else {
34+
cout << "Cheater" << endl;
35+
return 0;
36+
}
37+
}
38+
}
39+
40+
cout << "Not a proof" << endl;
41+
42+
return 0;
43+
}

Timus/1726.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include <iostream>
2+
#include <cmath>
3+
#include <algorithm>
4+
5+
using namespace std;
6+
7+
int main()
8+
{
9+
long long n;
10+
cin >> n;
11+
int x[n];
12+
int y[n];
13+
long long distance_walked = 0;
14+
15+
for (long long i = 0; i < n; i++) {
16+
cin >> x[i] >> y[i];
17+
}
18+
19+
sort(x, x+n);
20+
sort(y, y+n);
21+
22+
for (long long i = 1; i < n; i++) {
23+
distance_walked += abs(x[i] - x[i-1] + y[i] - y[i-1]) * i * (n-i);
24+
}
25+
26+
cout << (distance_walked * 2)/(n*(n-1)) << endl;
27+
28+
return 0;
29+
}

0 commit comments

Comments
 (0)