Skip to content

Commit 112e9c3

Browse files
committed
feat: add solutions to lc problem: No.1377
No.1377: Frog Position After T Seconds
1 parent 6c06c1b commit 112e9c3

File tree

8 files changed

+133
-54
lines changed

8 files changed

+133
-54
lines changed

solution/1300-1399/1377.Frog Position After T Seconds/README.md

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ class Solution:
103103
while q and t >= 0:
104104
for _ in range(len(q)):
105105
u, p = q.popleft()
106-
cnt = sum(not vis[v] for v in g[u])
106+
cnt = len(g[u]) - int(u != 1)
107107
if u == target:
108108
return p if cnt * t == 0 else 0
109109
for v in g[u]:
@@ -137,12 +137,7 @@ class Solution {
137137
var x = q.poll();
138138
int u = x.getKey();
139139
double p = x.getValue();
140-
int cnt = 0;
141-
for (int v : g[u]) {
142-
if (!vis[v]) {
143-
++cnt;
144-
}
145-
}
140+
int cnt = g[u].size() - (u == 1 ? 0 : 1);
146141
if (u == target) {
147142
return cnt * t == 0 ? p : 0;
148143
}
@@ -179,10 +174,7 @@ public:
179174
for (int k = q.size(); k; --k) {
180175
auto [u, p] = q.front();
181176
q.pop();
182-
int cnt = 0;
183-
for (int v : g[u]) {
184-
cnt += !vis[v];
185-
}
177+
int cnt = g[u].size() - (u != 1);
186178
if (u == target) {
187179
return cnt * t == 0 ? p : 0;
188180
}
@@ -220,12 +212,10 @@ func frogPosition(n int, edges [][]int, t int, target int) float64 {
220212
for k := len(q); k > 0; k-- {
221213
u, p := q[0].u, q[0].p
222214
q = q[1:]
223-
cnt := 0
224-
for _, v := range g[u] {
225-
if !vis[v] {
226-
cnt++
227-
}
228-
}
215+
cnt := len(g[u])
216+
if u != 1 {
217+
cnt--
218+
}
229219
if u == target {
230220
if cnt*t == 0 {
231221
return p
@@ -264,7 +254,7 @@ function frogPosition(
264254
for (; q.length > 0 && t >= 0; --t) {
265255
for (let k = q.length; k > 0; --k) {
266256
const [u, p] = q.shift()!;
267-
const cnt = g[u].filter(v => !vis[v]).length;
257+
const cnt = g[u].length - (u === 1 ? 0 : 1);
268258
if (u === target) {
269259
return cnt * t === 0 ? p : 0;
270260
}
@@ -280,6 +270,44 @@ function frogPosition(
280270
}
281271
```
282272

273+
### **C#**
274+
275+
```cs
276+
public class Solution {
277+
public double FrogPosition(int n, int[][] edges, int t, int target) {
278+
List<int>[] g = new List<int>[n + 1];
279+
for (int i = 0; i < n + 1; i++) {
280+
g[i] = new List<int>();
281+
}
282+
foreach (int[] e in edges) {
283+
int u = e[0], v = e[1];
284+
g[u].Add(v);
285+
g[v].Add(u);
286+
}
287+
Queue<Tuple<int, double>> q = new Queue<Tuple<int, double>>();
288+
q.Enqueue(new Tuple<int, double>(1, 1.0));
289+
bool[] vis = new bool[n + 1];
290+
vis[1] = true;
291+
for (; q.Count > 0 && t >= 0; --t) {
292+
for (int k = q.Count; k > 0; --k) {
293+
(var u, var p) = q.Dequeue();
294+
int cnt = g[u].Count - (u == 1 ? 0 : 1);
295+
if (u == target) {
296+
return cnt * t == 0 ? p : 0;
297+
}
298+
foreach (int v in g[u]) {
299+
if (!vis[v]) {
300+
vis[v] = true;
301+
q.Enqueue(new Tuple<int, double>(v, p / cnt));
302+
}
303+
}
304+
}
305+
}
306+
return 0;
307+
}
308+
}
309+
```
310+
283311
### **...**
284312

285313
```

solution/1300-1399/1377.Frog Position After T Seconds/README_EN.md

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class Solution:
6363
while q and t >= 0:
6464
for _ in range(len(q)):
6565
u, p = q.popleft()
66-
cnt = sum(not vis[v] for v in g[u])
66+
cnt = len(g[u]) - int(u != 1)
6767
if u == target:
6868
return p if cnt * t == 0 else 0
6969
for v in g[u]:
@@ -95,12 +95,7 @@ class Solution {
9595
var x = q.poll();
9696
int u = x.getKey();
9797
double p = x.getValue();
98-
int cnt = 0;
99-
for (int v : g[u]) {
100-
if (!vis[v]) {
101-
++cnt;
102-
}
103-
}
98+
int cnt = g[u].size() - (u == 1 ? 0 : 1);
10499
if (u == target) {
105100
return cnt * t == 0 ? p : 0;
106101
}
@@ -137,10 +132,7 @@ public:
137132
for (int k = q.size(); k; --k) {
138133
auto [u, p] = q.front();
139134
q.pop();
140-
int cnt = 0;
141-
for (int v : g[u]) {
142-
cnt += !vis[v];
143-
}
135+
int cnt = g[u].size() - (u != 1);
144136
if (u == target) {
145137
return cnt * t == 0 ? p : 0;
146138
}
@@ -178,12 +170,10 @@ func frogPosition(n int, edges [][]int, t int, target int) float64 {
178170
for k := len(q); k > 0; k-- {
179171
u, p := q[0].u, q[0].p
180172
q = q[1:]
181-
cnt := 0
182-
for _, v := range g[u] {
183-
if !vis[v] {
184-
cnt++
185-
}
186-
}
173+
cnt := len(g[u])
174+
if u != 1 {
175+
cnt--
176+
}
187177
if u == target {
188178
if cnt*t == 0 {
189179
return p
@@ -222,7 +212,7 @@ function frogPosition(
222212
for (; q.length > 0 && t >= 0; --t) {
223213
for (let k = q.length; k > 0; --k) {
224214
const [u, p] = q.shift()!;
225-
const cnt = g[u].filter(v => !vis[v]).length;
215+
const cnt = g[u].length - (u === 1 ? 0 : 1);
226216
if (u === target) {
227217
return cnt * t === 0 ? p : 0;
228218
}
@@ -238,6 +228,44 @@ function frogPosition(
238228
}
239229
```
240230

231+
### **C#**
232+
233+
```cs
234+
public class Solution {
235+
public double FrogPosition(int n, int[][] edges, int t, int target) {
236+
List<int>[] g = new List<int>[n + 1];
237+
for (int i = 0; i < n + 1; i++) {
238+
g[i] = new List<int>();
239+
}
240+
foreach (int[] e in edges) {
241+
int u = e[0], v = e[1];
242+
g[u].Add(v);
243+
g[v].Add(u);
244+
}
245+
Queue<Tuple<int, double>> q = new Queue<Tuple<int, double>>();
246+
q.Enqueue(new Tuple<int, double>(1, 1.0));
247+
bool[] vis = new bool[n + 1];
248+
vis[1] = true;
249+
for (; q.Count > 0 && t >= 0; --t) {
250+
for (int k = q.Count; k > 0; --k) {
251+
(var u, var p) = q.Dequeue();
252+
int cnt = g[u].Count - (u == 1 ? 0 : 1);
253+
if (u == target) {
254+
return cnt * t == 0 ? p : 0;
255+
}
256+
foreach (int v in g[u]) {
257+
if (!vis[v]) {
258+
vis[v] = true;
259+
q.Enqueue(new Tuple<int, double>(v, p / cnt));
260+
}
261+
}
262+
}
263+
}
264+
return 0;
265+
}
266+
}
267+
```
268+
241269
### **...**
242270

243271
```

solution/1300-1399/1377.Frog Position After T Seconds/Solution.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@ class Solution {
1515
for (int k = q.size(); k; --k) {
1616
auto [u, p] = q.front();
1717
q.pop();
18-
int cnt = 0;
19-
for (int v : g[u]) {
20-
cnt += !vis[v];
21-
}
18+
int cnt = g[u].size() - (u != 1);
2219
if (u == target) {
2320
return cnt * t == 0 ? p : 0;
2421
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
public class Solution {
2+
public double FrogPosition(int n, int[][] edges, int t, int target) {
3+
List<int>[] g = new List<int>[n + 1];
4+
for (int i = 0; i < n + 1; i++) {
5+
g[i] = new List<int>();
6+
}
7+
foreach (int[] e in edges) {
8+
int u = e[0], v = e[1];
9+
g[u].Add(v);
10+
g[v].Add(u);
11+
}
12+
Queue<Tuple<int, double>> q = new Queue<Tuple<int, double>>();
13+
q.Enqueue(new Tuple<int, double>(1, 1.0));
14+
bool[] vis = new bool[n + 1];
15+
vis[1] = true;
16+
for (; q.Count > 0 && t >= 0; --t) {
17+
for (int k = q.Count; k > 0; --k) {
18+
(var u, var p) = q.Dequeue();
19+
int cnt = g[u].Count - (u == 1 ? 0 : 1);
20+
if (u == target) {
21+
return cnt * t == 0 ? p : 0;
22+
}
23+
foreach (int v in g[u]) {
24+
if (!vis[v]) {
25+
vis[v] = true;
26+
q.Enqueue(new Tuple<int, double>(v, p / cnt));
27+
}
28+
}
29+
}
30+
}
31+
return 0;
32+
}
33+
}

solution/1300-1399/1377.Frog Position After T Seconds/Solution.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@ func frogPosition(n int, edges [][]int, t int, target int) float64 {
1616
for k := len(q); k > 0; k-- {
1717
u, p := q[0].u, q[0].p
1818
q = q[1:]
19-
cnt := 0
20-
for _, v := range g[u] {
21-
if !vis[v] {
22-
cnt++
23-
}
19+
cnt := len(g[u])
20+
if u != 1 {
21+
cnt--
2422
}
2523
if u == target {
2624
if cnt*t == 0 {

solution/1300-1399/1377.Frog Position After T Seconds/Solution.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,7 @@ public double frogPosition(int n, int[][] edges, int t, int target) {
1616
var x = q.poll();
1717
int u = x.getKey();
1818
double p = x.getValue();
19-
int cnt = 0;
20-
for (int v : g[u]) {
21-
if (!vis[v]) {
22-
++cnt;
23-
}
24-
}
19+
int cnt = g[u].size() - (u == 1 ? 0 : 1);
2520
if (u == target) {
2621
return cnt * t == 0 ? p : 0;
2722
}

solution/1300-1399/1377.Frog Position After T Seconds/Solution.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ def frogPosition(
1212
while q and t >= 0:
1313
for _ in range(len(q)):
1414
u, p = q.popleft()
15-
cnt = sum(not vis[v] for v in g[u])
15+
cnt = len(g[u]) - int(u != 1)
1616
if u == target:
1717
return p if cnt * t == 0 else 0
1818
for v in g[u]:
1919
if not vis[v]:
2020
vis[v] = True
2121
q.append((v, p / cnt))
2222
t -= 1
23-
return 0
23+
return 0

solution/1300-1399/1377.Frog Position After T Seconds/Solution.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function frogPosition(
1515
for (; q.length > 0 && t >= 0; --t) {
1616
for (let k = q.length; k > 0; --k) {
1717
const [u, p] = q.shift()!;
18-
const cnt = g[u].filter(v => !vis[v]).length;
18+
const cnt = g[u].length - (u === 1 ? 0 : 1);
1919
if (u === target) {
2020
return cnt * t === 0 ? p : 0;
2121
}

0 commit comments

Comments
 (0)