Skip to content

Commit 36d870a

Browse files
committed
abc287d & 1124-1250-1297 & 第332场周赛T1~T3 (6)
1 parent 6ea9897 commit 36d870a

File tree

24 files changed

+620
-74
lines changed

24 files changed

+620
-74
lines changed

atcoder-beginner/src/main/java/c279/Abc279_d.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,32 @@
44
import java.util.Scanner;
55

66
public class Abc279_d {
7+
static long a, b;
8+
79
public static void main(String[] args) {
810
Scanner scanner = new Scanner(System.in, StandardCharsets.UTF_8);
9-
long A = scanner.nextLong();
10-
long B = scanner.nextLong();
11-
12-
long left = 0;
13-
long right = Math.max(A, B);
14-
double lans = f(A, B, right);
15-
double rans = f(A, B, left);
16-
while (left < right) {
17-
long lmid = left + (right - left) / 3;
18-
long rmid = right - (right - left) / 3;
19-
lans = f(A, B, lmid);
20-
rans = f(A, B, rmid);
11+
a = scanner.nextLong();
12+
b = scanner.nextLong();
2113

22-
if (lans <= rans) {
23-
right = rmid - 1;
14+
long l = 0, r = a / b;
15+
while (r - l > 2) {
16+
long m1 = (l * 2 + r) / 3;
17+
long m2 = (l + r * 2) / 3;
18+
if (f(m1) > f(m2)) {
19+
l = m1;
2420
} else {
25-
left = lmid + 1;
21+
r = m2;
2622
}
2723
}
28-
double res = Math.min(lans, rans);
24+
double res = a;
25+
for (long i = l; i <= r; i++) {
26+
res = Math.min(res, f(i));
27+
}
2928
System.out.printf("%.10f%n", res);
3029
}
3130

32-
private static double f(long A, long B, long k) {
33-
return (double) B * k + A / Math.sqrt(k + 1);
31+
private static double f(long n) {
32+
return (double) b * n + (double) a / Math.sqrt(n + 1);
3433
}
3534
}
3635
/*
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package c287;
2+
3+
import java.nio.charset.StandardCharsets;
4+
import java.util.Scanner;
5+
6+
public class Abc287_d {
7+
public static void main(String[] args) {
8+
Scanner scanner = new Scanner(System.in, StandardCharsets.UTF_8);
9+
String s = scanner.next();
10+
String t = scanner.next();
11+
System.out.println(solve(s, t));
12+
}
13+
14+
private static String solve(String s, String t) {
15+
int n = s.length();
16+
int m = t.length();
17+
18+
// pre[i] 表示前缀长度为 i 时,前缀是否 match
19+
boolean[] pre = new boolean[m + 1];
20+
pre[0] = true;
21+
for (int i = 1; i <= m; i++) {
22+
char ch1 = s.charAt(i - 1);
23+
char ch2 = t.charAt(i - 1);
24+
pre[i] = pre[i - 1] && (ch1 == ch2 || ch1 == '?' || ch2 == '?');
25+
if (!pre[i]) break;
26+
}
27+
28+
// suf[i] 表示后缀长度为 i 时,后缀是否 match
29+
boolean[] suf = new boolean[m + 1];
30+
suf[0] = true;
31+
for (int i = 1; i <= m; i++) {
32+
char ch1 = s.charAt(n - i);
33+
char ch2 = t.charAt(m - i);
34+
suf[i] = suf[i - 1] && (ch1 == ch2 || ch1 == '?' || ch2 == '?');
35+
if (!suf[i]) break;
36+
}
37+
38+
String[] res = new String[m + 1];
39+
for (int i = 0; i < m + 1; i++) {
40+
res[i] = pre[i] && suf[m - i] ? "Yes" : "No";
41+
}
42+
return String.join(System.lineSeparator(), res);
43+
}
44+
}
45+
/*
46+
D - Match or Not
47+
https://atcoder.jp/contests/abc287/tasks/abc287_d
48+
49+
预处理 前后缀
50+
*/
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package c287;
2+
3+
import base.AbstractOjTests;
4+
import org.junit.jupiter.api.Test;
5+
6+
import java.io.IOException;
7+
8+
public class Abc287dTests extends AbstractOjTests {
9+
public Abc287dTests() {
10+
super("/c287/D/");
11+
}
12+
13+
@Test
14+
public void example1() throws IOException {
15+
super.doSetSystemInOut(INPUT1);
16+
Abc287_d.main(null);
17+
super.doAssertion(OUTPUT1);
18+
}
19+
20+
@Test
21+
public void example2() throws IOException {
22+
super.doSetSystemInOut(INPUT2);
23+
Abc287_d.main(null);
24+
super.doAssertion(OUTPUT2);
25+
}
26+
27+
@Test
28+
public void example3() throws IOException {
29+
super.doSetSystemInOut(INPUT3);
30+
Abc287_d.main(null);
31+
super.doAssertion(OUTPUT3);
32+
}
33+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
a?c
2+
b?
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
atcoder
2+
?????
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
beginner
2+
contest
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Yes
2+
No
3+
No
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Yes
2+
Yes
3+
Yes
4+
Yes
5+
Yes
6+
Yes
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
No
2+
No
3+
No
4+
No
5+
No
6+
No
7+
No
8+
No
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import java.util.HashMap;
2+
import java.util.Map;
3+
4+
public class Solution1124 {
5+
public int longestWPI(int[] hours) {
6+
int n = hours.length;
7+
Map<Integer, Integer> sumMap = new HashMap<>();
8+
int sum = 0;
9+
int max = 0;
10+
for (int j = 0; j < n; j++) {
11+
// 求解区间分数和大于 0 的最长区间长度
12+
sum += hours[j] > 8 ? 1 : -1;
13+
if (sum > 0) {
14+
// [0, j]
15+
max = Math.max(max, j + 1);
16+
} else {
17+
if (sumMap.containsKey(sum - 1)) {
18+
int i = sumMap.get(sum - 1);
19+
// [0,j] - [0,i] = (i,j]
20+
max = Math.max(max, j - i);
21+
}
22+
}
23+
if (!sumMap.containsKey(sum)) {
24+
sumMap.put(sum, j);
25+
}
26+
}
27+
return max;
28+
}
29+
}
30+
/*
31+
1124. 表现良好的最长时间段
32+
https://leetcode.cn/problems/longest-well-performing-interval/
33+
34+
给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。
35+
我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。
36+
所谓「表现良好的时间段」,意味在这段时间内,「劳累的天数」是严格 大于「不劳累的天数」。
37+
请你返回「表现良好时间段」的最大长度。
38+
提示:
39+
1 <= hours.length <= 10^4
40+
0 <= hours[i] <= 16
41+
42+
前缀和 + 哈希
43+
相似题目: 题目-02. 销售出色区间
44+
https://leetcode.cn/contest/hhrc2022/problems/0Wx4Pc/
45+
*/

0 commit comments

Comments
 (0)