邓心一 6 년 전
부모
커밋
1c4b655021

+ 14 - 0
oj/tencent-2019-summer/no1/greed.go

@@ -0,0 +1,14 @@
+package main
+
+import "fmt"
+
+func main() {
+	var n, m int
+	fmt.Scan(&n, &m)
+	cnt := 0
+	for i := n; 1 <= i && 0 < m; i-- {
+		cnt += m / i
+		m %= i
+	}
+	fmt.Println(cnt)
+}

+ 26 - 0
oj/tencent-2019-summer/no2/sum.go

@@ -0,0 +1,26 @@
+package main
+
+import "fmt"
+
+func main() {
+	var q int
+	fmt.Scan(&q)
+	for i := 0; i < q; i++ {
+		var l, r int
+		fmt.Scan(&l, &r)
+		sum, length := 0, r-l+1
+		if l%2 == 0 {
+			sum -= length / 2
+		} else {
+			sum += length / 2
+		}
+		if length%2 == 1 {
+			if r%2 == 1 {
+				sum -= r
+			} else {
+				sum += r
+			}
+		}
+		fmt.Println(sum)
+	}
+}

+ 31 - 0
oj/tencent-2019-summer/no3/card.go

@@ -0,0 +1,31 @@
+package main
+
+import "fmt"
+
+const MOD int = 1000000007
+
+func main() {
+	var n, s int
+	fmt.Scan(&n, &s)
+	cards := make([]int, n)
+	for i := range cards {
+		fmt.Scan(&cards[i])
+	}
+	dp := make([][]int, n)
+	for i := range dp {
+		dp[i] = make([]int, s+1)
+	}
+	dp[0][0] = 2
+	if s != 0 {
+		dp[0][1] = 1
+	}
+	for i := 1; i < n; i++ {
+		for j := 0; j <= s; j++ {
+			dp[i][j] = (2 * dp[i-1][j]) % MOD // Not win
+			if j > 0 {
+				dp[i][j] = (dp[i][j] + dp[i-1][j-1]) % MOD // Win
+			}
+		}
+	}
+	fmt.Println(dp[n-1][s])
+}

+ 43 - 0
oj/tencent-2019-summer/no4/Main.java

@@ -0,0 +1,43 @@
+import java.util.Scanner;
+
+public class Main {
+    public static void main(String[] args) {
+        Scanner scanner = new Scanner(System.in);
+        int n = scanner.nextInt(), m = scanner.nextInt();
+        int[] shoot = new int[n];
+        for (int i = 0; i < n; i++) {
+            shoot[i] = scanner.nextInt();
+        }
+        int[] map = new int[m+1];
+        int min = -1, cnt = 0;
+        int l = 0, r = 0;
+        for (; r < n; r++) {
+            if (cnt == m) {
+                for (; l <= r && cnt == m; l++) {
+                    if (min == -1 || r-l < min) {
+                        min = r - l;
+                    }
+                    int c = shoot[l];
+                    if (c != 0) {
+                        map[c]--;
+                        if (map[c] == 0) {
+                            cnt--;
+                        }
+                    }
+                }
+            }
+            int c = shoot[r];
+            if (c != 0) {
+                if (map[c] == 0) {
+                    cnt++;
+                }
+                map[c]++;
+            }
+        }
+        if (cnt == m && (min == -1 || r-l < min)) {
+            min = r - l;
+        }
+        System.out.println(min);
+        scanner.close();
+    }
+}

+ 40 - 0
oj/tencent-2019-summer/no4/shoot.go

@@ -0,0 +1,40 @@
+package main
+
+import "fmt"
+
+func main() {
+	var n, m int
+	fmt.Scan(&n, &m)
+	shoot := make([]int, n)
+	for i := range shoot {
+		fmt.Scan(&shoot[i])
+	}
+	min, cnt := -1, 0
+	ma := make([]int, m+1)
+	l, r := 0, 0
+	for ; r < n; r++ {
+		if cnt == m {
+			for ; l <= r && cnt == m; l++ {
+				if min == -1 || r-l < min {
+					min = r - l
+				}
+				if c := shoot[l]; c != 0 {
+					ma[c]--
+					if ma[c] == 0 {
+						cnt--
+					}
+				}
+			}
+		}
+		if c := shoot[r]; c != 0 {
+			if ma[c] == 0 {
+				cnt++
+			}
+			ma[c]++
+		}
+	}
+	if cnt == m && r-l < min {
+		min = r - l
+	}
+	fmt.Println(min)
+}

+ 50 - 0
oj/tencent-2019-summer/no5/building.go

@@ -0,0 +1,50 @@
+package main
+
+import "fmt"
+
+const MOD int = 1000000009
+
+var n, L int
+
+func main() {
+	fmt.Scan(&n, &L)
+	color := make([]int, n)
+	for i := range color {
+		fmt.Scan(&color[i])
+	}
+	used := make([]bool, n)
+	cnt := dfs(color, 0, 0, -1, used)
+	fmt.Println(cnt)
+}
+
+func dfs(color []int, l int, cnt int, hi int, used []bool) int {
+	if n-l+cnt < L || L < cnt {
+		return 0
+	}
+	if l == n {
+		if cnt == L {
+			return 1
+		}
+		return 0
+	}
+	res := 0
+	for i := 0; i < n; i++ {
+		if used[i] {
+			continue
+		}
+		used[i] = true
+		if hi == -1 {
+			res += dfs(color, l+1, cnt+1, i, used)
+		} else if hi < i {
+			if color[hi] != color[i] {
+				res += dfs(color, l+1, cnt+1, i, used)
+			} else {
+				res += dfs(color, l+1, cnt, i, used)
+			}
+		} else {
+			res += dfs(color, l+1, cnt, hi, used)
+		}
+		used[i] = false
+	}
+	return res
+}