Leetcode contest pinned «@azamovme if this channel reaches 250 subscribers i send all of contest answers )»
import java.util.*;
public class Solution {
public long minimalCost2(long v0, long v1) {
if (v0 <= 0 && v1 <= 0) return 0;
long cost = 1;
v0 -= 1;
if (v0 > 0 && v1 > 0) {
long k = Math.min(v0, v1);
cost += 2 * k;
v0 -= k;
v1 -= k;
}
if (v0 > 0) {
cost += 2 * v0;
v0 = 0;
}
if (v1 > 0) {
cost += 1;
v1 -= 1;
cost += 2 * v1;
v1 = 0;
}
return cost;
}
public long maxScoreForN3(int[] p, int m) {
boolean[][][][][] visited = new boolean[3][51][51][51][51];
long bestMinScore = 0;
Queue<int[]> q = new LinkedList<>();
q.offer(new int[]{0, 1, 1, 0, 0});
while (!q.isEmpty()) {
int[] st = q.poll();
int pos = st[0], moves = st[1], v0 = st[2], v1 = st[3], v2 = st[4];
long s0 = (long) v0 * p[0];
long s1 = (long) v1 * p[1];
long s2 = (long) v2 * p[2];
long mn = Math.min(s0, Math.min(s1, s2));
bestMinScore = Math.max(bestMinScore, mn);
if (moves < m) {
for (int delta = -1; delta <= 1; delta += 2) {
int newPos = pos + delta;
if (newPos >= 0 && newPos < 3) {
int[] newV = {v0, v1, v2};
newV[newPos]++;
if (!visited[newPos][moves + 1][newV[0]][newV[1]][newV[2]]) {
visited[newPos][moves + 1][newV[0]][newV[1]][newV[2]] = true;
q.offer(new int[]{newPos, moves + 1, newV[0], newV[1], newV[2]});
}
}
}
}
}
return bestMinScore;
}
public boolean canAchieveSinglePass(int[] points, long m, long X) {
long totalVisits = 0;
for (int p : points) {
if (X > 0) {
long need = (X + p - 1) / p;
totalVisits += need;
if (totalVisits > m + points.length + 1) return false;
}
}
long cost = 2 * totalVisits - (points.length + 1);
return cost <= m;
}
public long maxScore(int[] points, long m) {
int n = points.length;
if (m == 0) return 0;
if (n == 2) {
long left = 0, right = 1_000_000_000_000_000L, ans = 0;
while (left <= right) {
long mid = (left + right) / 2;
long v0 = (mid > 0) ? (mid + points[0] - 1) / points[0] : 0;
long v1 = (mid > 0) ? (mid + points[1] - 1) / points[1] : 0;
if (minimalCost2(v0, v1) <= m) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return ans;
}
long left = 0, right = 1_000_000_000_000_000L, ans = 0;
while (left <= right) {
long mid = (left + right) / 2;
if (canAchieveSinglePass(points, m, mid)) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return ans;
}
}
public class Solution {
public long minimalCost2(long v0, long v1) {
if (v0 <= 0 && v1 <= 0) return 0;
long cost = 1;
v0 -= 1;
if (v0 > 0 && v1 > 0) {
long k = Math.min(v0, v1);
cost += 2 * k;
v0 -= k;
v1 -= k;
}
if (v0 > 0) {
cost += 2 * v0;
v0 = 0;
}
if (v1 > 0) {
cost += 1;
v1 -= 1;
cost += 2 * v1;
v1 = 0;
}
return cost;
}
public long maxScoreForN3(int[] p, int m) {
boolean[][][][][] visited = new boolean[3][51][51][51][51];
long bestMinScore = 0;
Queue<int[]> q = new LinkedList<>();
q.offer(new int[]{0, 1, 1, 0, 0});
while (!q.isEmpty()) {
int[] st = q.poll();
int pos = st[0], moves = st[1], v0 = st[2], v1 = st[3], v2 = st[4];
long s0 = (long) v0 * p[0];
long s1 = (long) v1 * p[1];
long s2 = (long) v2 * p[2];
long mn = Math.min(s0, Math.min(s1, s2));
bestMinScore = Math.max(bestMinScore, mn);
if (moves < m) {
for (int delta = -1; delta <= 1; delta += 2) {
int newPos = pos + delta;
if (newPos >= 0 && newPos < 3) {
int[] newV = {v0, v1, v2};
newV[newPos]++;
if (!visited[newPos][moves + 1][newV[0]][newV[1]][newV[2]]) {
visited[newPos][moves + 1][newV[0]][newV[1]][newV[2]] = true;
q.offer(new int[]{newPos, moves + 1, newV[0], newV[1], newV[2]});
}
}
}
}
}
return bestMinScore;
}
public boolean canAchieveSinglePass(int[] points, long m, long X) {
long totalVisits = 0;
for (int p : points) {
if (X > 0) {
long need = (X + p - 1) / p;
totalVisits += need;
if (totalVisits > m + points.length + 1) return false;
}
}
long cost = 2 * totalVisits - (points.length + 1);
return cost <= m;
}
public long maxScore(int[] points, long m) {
int n = points.length;
if (m == 0) return 0;
if (n == 2) {
long left = 0, right = 1_000_000_000_000_000L, ans = 0;
while (left <= right) {
long mid = (left + right) / 2;
long v0 = (mid > 0) ? (mid + points[0] - 1) / points[0] : 0;
long v1 = (mid > 0) ? (mid + points[1] - 1) / points[1] : 0;
if (minimalCost2(v0, v1) <= m) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return ans;
}
long left = 0, right = 1_000_000_000_000_000L, ans = 0;
while (left <= right) {
long mid = (left + right) / 2;
if (canAchieveSinglePass(points, m, mid)) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return ans;
}
}
class Solution {
public String removeOccurrences(String s, String part) {
while (s.contains(part)) {
s = s.replaceFirst(part, "");
}
return s;
}
}Forwarded from Azamov | Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegraph
ChatGPT Audience Doubles to 400 Million Weekly Users
ChatGPT’s user base continues to grow rapidly—according to OpenAI, the number of weekly active users has reached 400 million. This is twice the number recorded in August 2024, when the platform had 200 million users, and 100 million morethan in December.…