Skip to content

Commit d8a55ae

Browse files
committed
did some leetcode problems and tried another contest
1 parent 828fe84 commit d8a55ae

File tree

10 files changed

+590
-85
lines changed

10 files changed

+590
-85
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
/******************************************
6+
Link:
7+
Points:
8+
******************************************/
9+
10+
struct Point
11+
{
12+
int x;
13+
int y;
14+
int z;
15+
};
16+
17+
void the5thLaboratory()
18+
{
19+
Point labCoordinates;
20+
scanf("%d %d %d", &labCoordinates.x, &labCoordinates.y, &labCoordinates.z);
21+
22+
int N;
23+
scanf("%d", &N);
24+
25+
Point hidingSpotCoordinates;
26+
double minimumTime = -1;
27+
double time = 0;
28+
double distance = 0;
29+
for (int i = 0; i < N; ++i)
30+
{
31+
scanf("%d %d %d", &hidingSpotCoordinates.x, &hidingSpotCoordinates.y, &hidingSpotCoordinates.z);
32+
33+
if (hidingSpotCoordinates.z == labCoordinates.z)
34+
{
35+
// Just calculate the triangle distance
36+
distance = hypot(abs(hidingSpotCoordinates.x - labCoordinates.x), abs(hidingSpotCoordinates.y - labCoordinates.y));
37+
time = distance / 2;
38+
}
39+
else if (hidingSpotCoordinates.z < labCoordinates.z)
40+
{
41+
// Straight line distance
42+
distance = hypot(abs(hidingSpotCoordinates.x - labCoordinates.x), abs(hidingSpotCoordinates.y - labCoordinates.y));
43+
time += distance / 2;
44+
45+
// Now we climb up
46+
distance = abs(labCoordinates.z - hidingSpotCoordinates.z);
47+
time += distance;
48+
}
49+
else
50+
{
51+
// Go all the way down
52+
distance = abs(hidingSpotCoordinates.z - labCoordinates.z);
53+
time += distance / 4;
54+
55+
// Get the distance remaining
56+
distance = hypot(abs(hidingSpotCoordinates.x - labCoordinates.x), abs(hidingSpotCoordinates.y - labCoordinates.y)) - (3 * time);
57+
58+
// Travel on flat ground
59+
time += abs(distance) / 2;
60+
}
61+
62+
if (minimumTime == -1)
63+
minimumTime = time;
64+
else
65+
minimumTime = min(minimumTime, time);
66+
}
67+
68+
printf("%f\n", minimumTime);
69+
}
70+
71+
int main()
72+
{
73+
the5thLaboratory();
74+
return 0;
75+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
/******************************************
6+
Link:
7+
Points:
8+
******************************************/
9+
10+
void togetherForever()
11+
{
12+
int N;
13+
scanf("%d", &N);
14+
15+
vector<int> a(N), b(N);
16+
for (int i = 0; i < N; ++i)
17+
scanf("%d", &a[i]);
18+
for (int i = 0; i < N; ++i)
19+
scanf("%d", &b[i]);
20+
21+
vector<pair<int, int>> swaps;
22+
for (int i = 0; i < N; ++i)
23+
{
24+
if (a[i] != b[i])
25+
{
26+
int firstIndex = 0;
27+
for (int j = i + 1; j < N; ++j)
28+
{
29+
if (a[j] == b[i])
30+
{
31+
firstIndex = j;
32+
break;
33+
}
34+
}
35+
swaps.push_back(pair<int, int>(i + 1, firstIndex + 1));
36+
swap(a[i], a[firstIndex]);
37+
}
38+
}
39+
40+
printf("%d\n", swaps.size());
41+
for (int i = 0; i < swaps.size(); ++i)
42+
printf("%d %d\n", swaps[i].first, swaps[i].second);
43+
}
44+
45+
int main()
46+
{
47+
togetherForever();
48+
return 0;
49+
}
Binary file not shown.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
/******************************************
6+
Link:
7+
Points:
8+
******************************************/
9+
10+
void domainExpansion()
11+
{
12+
int N, K;
13+
scanf("%d %d", &N, &K);
14+
15+
// .first = sorcerer index
16+
// .second = strength
17+
vector<pair<int, int>> regions(K, pair<int, int>({-1, -1}));
18+
for (int i = 0; i < N; ++i)
19+
{
20+
int l, r, s;
21+
scanf("%d %d %d", &l, &r, &s);
22+
for (int j = l - 1; j < r; ++j)
23+
// the current strength is greater
24+
if (s > regions[j].second)
25+
regions[j] = pair<int, int>({i, s});
26+
}
27+
28+
vector<int> expansions(N, 0);
29+
for (int i = 0; i < regions.size(); ++i)
30+
if (regions[i].first != -1)
31+
++expansions[regions[i].first];
32+
33+
for (int i = 0; i < expansions.size(); ++i)
34+
printf("%d ", expansions[i]);
35+
printf("\n");
36+
}
37+
38+
int main()
39+
{
40+
domainExpansion();
41+
return 0;
42+
}

Solutions/Leetcode Solutions/medium/uniquePaths2.cpp

Lines changed: 0 additions & 53 deletions
This file was deleted.
167 KB
Binary file not shown.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
/******************************************
6+
Link: https://leetcode.com/problems/word-break/description/
7+
Runtime: 100.00%
8+
Memory: 82.41%
9+
Inspiration: https://www.youtube.com/watch?v=Sx9NNgInc3A
10+
******************************************/
11+
12+
bool wordBreak(string s, vector<string> &wordDict)
13+
{
14+
vector<int> dp(s.size() + 1, false);
15+
dp[s.size()] = true;
16+
17+
for (int i = s.size() - 1; i >= 0; --i)
18+
{
19+
for (int j = 0; j < wordDict.size(); ++j)
20+
{
21+
if (i + wordDict[j].size() <= s.size())
22+
{
23+
string subStr = s.substr(i, wordDict[j].size());
24+
if (subStr == wordDict[j])
25+
dp[i] = dp[i + wordDict[j].size()];
26+
}
27+
if (dp[i])
28+
break;
29+
}
30+
}
31+
32+
return dp[0];
33+
}
34+
35+
int main()
36+
{
37+
vector<string> dict({"apple", "pen"});
38+
string s = "applepenapple";
39+
cout << wordBreak(s, dict) << endl;
40+
return 0;
41+
}

anki

73.4 KB
Binary file not shown.

anki.cpp

Lines changed: 58 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,61 @@
22

33
using namespace std;
44

5+
void gates()
6+
{
7+
int numberOfGates;
8+
int numberOfPlanes;
9+
10+
scanf("%d", &numberOfGates);
11+
scanf("%d", &numberOfPlanes);
12+
13+
vector<int> planes(numberOfPlanes);
14+
set<int, greater<int>> gates;
15+
for (int i = 0; i < numberOfPlanes; ++i)
16+
scanf("%d", &planes[i]);
17+
for (int i = 1; i <= numberOfGates; ++i)
18+
gates.insert(i);
19+
20+
int numberOfPlanesAbleToDock = 0;
21+
for (int i = 0; i < numberOfPlanes; ++i)
22+
{
23+
auto gate = gates.lower_bound(planes[i]);
24+
if (gate == gates.end())
25+
break;
26+
gates.erase(*gate);
27+
++numberOfPlanesAbleToDock;
28+
}
29+
30+
printf("%d\n", numberOfPlanesAbleToDock);
31+
}
32+
33+
int subarraySumEqualsK(vector<int> &nums, int k)
34+
{
35+
unordered_map<int, int> previousSums;
36+
previousSums[0] = 1;
37+
int prefixSum;
38+
int numberOfSubarrays = 0;
39+
40+
for (int i = 0; i < nums.size(); ++i)
41+
{
42+
prefixSum += nums[i];
43+
int diff = prefixSum - k;
44+
45+
if (previousSums.count(diff))
46+
numberOfSubarrays += previousSums[diff];
47+
if (previousSums.count(prefixSum))
48+
++previousSums[prefixSum];
49+
else
50+
previousSums[prefixSum] = 1;
51+
}
52+
53+
return numberOfSubarrays;
54+
}
55+
556
int deleteAndEarn(vector<int> &nums)
657
{
758
sort(nums.begin(), nums.end());
859
vector<int> numsPrime;
9-
1060
unordered_map<int, int> counts;
1161

1262
for (int i = 0; i < nums.size(); ++i)
@@ -20,45 +70,21 @@ int deleteAndEarn(vector<int> &nums)
2070
for (int i = 0; i < numsPrime.size(); ++i)
2171
{
2272
int value = numsPrime[i] * counts[numsPrime[i]];
23-
if (i > 0 && numsPrime[i] - numsPrime[i - 1] == 1)
24-
dp[i] = max(dp[i - 1], value + (i >= 2 ? dp[i - 2] : 0));
25-
else if (i > 0)
26-
dp[i] = value + dp[i - 1];
73+
74+
if (i > 0 && numsPrime[i] - numsPrime[i - 1] > 1)
75+
value += numsPrime[i - 1];
76+
else if (i >= 2 && numsPrime[i] - numsPrime[i - 1] == 1)
77+
value += dp[i - 2];
78+
if (i > 0)
79+
dp[i] = max(dp[i - 1], value);
2780
else
2881
dp[i] = value;
2982
}
3083

3184
return dp[dp.size() - 1];
3285
}
3386

34-
int subarraySumEqualsK(vector<int> &nums, int k)
35-
{
36-
unordered_map<int, int> prefixSumsCount;
37-
prefixSumsCount[0] = 1;
38-
39-
int prefixSum = 0;
40-
int diff = 0;
41-
int numberOfSubarrays = 0;
42-
43-
for (int i = 0; i < nums.size(); ++i)
44-
{
45-
prefixSum += nums[i];
46-
diff = prefixSum - k;
47-
48-
if (prefixSumsCount.count(diff))
49-
numberOfSubarrays += prefixSumsCount[diff];
50-
if (prefixSumsCount.count(prefixSum))
51-
++prefixSumsCount[prefixSum];
52-
else
53-
prefixSumsCount[prefixSum] = 1;
54-
}
55-
56-
return numberOfSubarrays;
57-
}
58-
5987
int main()
6088
{
61-
vector<int> nums({2, 2, 3, 3, 3, 4});
62-
cout << deleteAndEarn(nums) << endl;
6389
return 0;
6490
}

0 commit comments

Comments
 (0)