Skip to content

Commit 250f47e

Browse files
committed
update
1 parent a0023db commit 250f47e

7 files changed

+207
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Time : 374 ms
2+
// Memory: 1200 KB
3+
// Dynamic program.
4+
// T:O(sum(ni)), S:O(max(ni))
5+
//
6+
import java.util.Scanner;
7+
8+
public class Codeforces_1363B_Subsequence_Hate {
9+
public static void main(String[] args) {
10+
Scanner sc = new Scanner(System.in);
11+
int t = sc.nextInt();
12+
for (int i = 0; i < t; i++) {
13+
String s = sc.next();
14+
int len = s.length(), ret = len, count1 = 0, count0 = 0;
15+
for (char c : s.toCharArray()) {
16+
if (c == '1') {
17+
count1++;
18+
} else {
19+
count0++;
20+
}
21+
}
22+
ret = Math.min(count0, count1);
23+
int cur1 = 0, cur0 = 0;
24+
for (int j = 0; j < len; j++) {
25+
if (s.charAt(j) == '0') {
26+
cur0++;
27+
count0--;
28+
} else {
29+
cur1++;
30+
count1--;
31+
}
32+
ret = Math.min(ret, Math.min(cur0 + count1, cur1 + count0));
33+
}
34+
35+
System.out.println(ret);
36+
}
37+
}
38+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Time: 328 ms
2+
// Memory: 1400 KB
3+
// .
4+
// T:O(sum(ni)), S:O(max(ni))
5+
//
6+
import java.util.Scanner;
7+
8+
public class Codeforces_1726A_Mainak_and_Array {
9+
public static void main(String[] args) {
10+
Scanner sc = new Scanner(System.in);
11+
int t = sc.nextInt();
12+
for (int i = 0; i < t; i++) {
13+
int n = sc.nextInt();
14+
int max1 = 0, min1 = Integer.MAX_VALUE, maxDiff = 0, ret = 0;
15+
int[] arr = new int[n];
16+
for (int j = 0; j < n; j++) {
17+
int a = sc.nextInt();
18+
arr[j] = a;
19+
if (j >= 1) {
20+
max1 = Math.max(max1, a);
21+
maxDiff = Math.max(maxDiff, Math.max(0, arr[j - 1] - a));
22+
}
23+
if (j < n - 1) {
24+
min1 = Math.min(min1, a);
25+
}
26+
}
27+
if (n > 1) {
28+
// 3种情形:翻转 [2..n], 翻转 [1..n-1], 以及任意 arr[j] - arr[j+1] 或 arr[n-1]-arr[0]
29+
maxDiff = Math.max(maxDiff, Math.max(0, arr[n - 1] - arr[0]));
30+
ret = Math.max(maxDiff, max1 - arr[0]);
31+
ret = Math.max(ret, arr[n - 1] - min1);
32+
}
33+
System.out.println(ret);
34+
}
35+
}
36+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Time: 780 ms
2+
// Memory: 1000 KB
3+
// Greedy:注意当 n 为奇数时,最小的元素不能全部被 k 减掉,而要考虑和第二小的元素的差值。
4+
// T:O(sum(ni)), S:O(max(ni))
5+
//
6+
import java.util.Arrays;
7+
import java.util.Collections;
8+
import java.util.Scanner;
9+
10+
public class Codeforces_2004C_Splitting_Items {
11+
public static void main(String[] args) {
12+
Scanner sc = new Scanner(System.in);
13+
int t = sc.nextInt();
14+
for (int i = 0; i < t; i++) {
15+
int n = sc.nextInt(), k = sc.nextInt();
16+
Integer[] arr = new Integer[n];
17+
for (int j = 0; j < n; j++) {
18+
arr[j] = sc.nextInt();
19+
}
20+
long ret = 0, diff = 0;
21+
Arrays.sort(arr, Collections.reverseOrder());
22+
for (int j = 0; j < n / 2; j++) {
23+
ret += arr[j * 2] - arr[j * 2 + 1];
24+
diff += arr[j * 2] - arr[j * 2 + 1];
25+
}
26+
if (n % 2 == 1) {
27+
ret += arr[n - 1];
28+
}
29+
ret = ret - Math.min(diff, k);
30+
31+
System.out.println(ret);
32+
}
33+
}
34+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Time: 437 ms
2+
// Memory: 1300 KB
3+
// 因为是每个元素必有两个,那么任意一遍 distinct >= 3 即可成立。只需讨论两边同时 distint <= 2 情况,可知必须 distinc 同时 == 2.
4+
// T:O(sum(ni)), S:O(max(ni))
5+
//
6+
import java.util.HashSet;
7+
import java.util.Scanner;
8+
9+
public class Codeforces_2059A_Milya_and_Two_Arrays {
10+
public static void main(String[] args) {
11+
Scanner sc = new Scanner(System.in);
12+
int t = sc.nextInt();
13+
for (int i = 0; i < t; i++) {
14+
int n = sc.nextInt();
15+
HashSet<Integer> setA = new HashSet<>(), setB = new HashSet<>();
16+
for (int j = 0; j < n; j++) {
17+
setA.add(sc.nextInt());
18+
}
19+
for (int j = 0; j < n; j++) {
20+
setB.add(sc.nextInt());
21+
}
22+
23+
System.out.println(setA.size() * setB.size() >= 3 ? "YES" : "NO");
24+
}
25+
}
26+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Time: 265 ms
2+
// Memory: 800 KB
3+
// .
4+
// T:O(sum(ni)), S:O(1)
5+
//
6+
import java.util.Scanner;
7+
8+
public class Codeforces_2065B_Skibidus_and_Ohio {
9+
public static void main(String[] args) {
10+
Scanner sc = new Scanner(System.in);
11+
int t = sc.nextInt();
12+
for (int i = 0; i < t; i++) {
13+
String s = sc.next();
14+
boolean flag = false;
15+
char prev = s.charAt(0);
16+
for (int j = 0; j < s.length() - 1; j++) {
17+
if (s.charAt(j + 1) == prev) {
18+
flag = true;
19+
break;
20+
}
21+
prev = s.charAt(j + 1);
22+
}
23+
24+
System.out.println(flag ? 1 : s.length());
25+
}
26+
}
27+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Runtime 8 ms Beats 100.00%
2+
// Memory 45.52 MB Beats 100.00%
3+
// .
4+
// T:O(n^2), S:O(n)
5+
//
6+
class Solution {
7+
public boolean hasSameDigits(String s) {
8+
List<Integer> digits = new ArrayList<>();
9+
for (char c : s.toCharArray()) {
10+
digits.add(c - '0');
11+
}
12+
while (digits.size() > 2) {
13+
List<Integer> tmp = new ArrayList<>();
14+
for (int i = 0; i < digits.size() - 1; i++) {
15+
tmp.add((digits.get(i) + digits.get(i + 1)) % 10);
16+
}
17+
digits = tmp;
18+
}
19+
20+
return digits.get(0) == digits.get(1);
21+
}
22+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Runtime 115 ms Beats 100.00%
2+
// Memory 77.70 MB Beats -%
3+
// Sorting.
4+
// T:O(m * n), S:O(m * n)
5+
//
6+
class Solution {
7+
public long maxSum(int[][] grid, int[] limits, int k) {
8+
List<Integer> record = new ArrayList<>();
9+
int row = grid.length, col = grid[0].length;
10+
long ret = 0;
11+
for (int i = 0; i < row; i++) {
12+
Arrays.sort(grid[i]);
13+
for (int j = 0; j < limits[i]; j++) {
14+
record.add(grid[i][col - 1 - j]);
15+
}
16+
}
17+
Collections.sort(record, Collections.reverseOrder());
18+
for (int i = 0; i < k; i++) {
19+
ret += record.get(i);
20+
}
21+
22+
return ret;
23+
}
24+
}

0 commit comments

Comments
 (0)