Skip to content

Commit 101183e

Browse files
committed
update
1 parent d1d4813 commit 101183e

7 files changed

+288
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// AC: 328 ms
2+
// Memory: 1000 KB
3+
// .
4+
// T:O(n), S:O(n)
5+
//
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import java.util.Scanner;
9+
10+
public class Codeforces_1005A_Tanya_and_Stairways {
11+
public static void main(String[] args) {
12+
Scanner sc = new Scanner(System.in);
13+
int n = sc.nextInt(), cur = 0;
14+
List<Integer> ret = new ArrayList<>();
15+
for (int i = 0; i < n; i++) {
16+
int a = sc.nextInt();
17+
if (a == 1) {
18+
if (cur > 0) {
19+
ret.add(cur);
20+
}
21+
cur = 1;
22+
} else {
23+
cur++;
24+
}
25+
if (i == n - 1) {
26+
ret.add(cur);
27+
cur = 0;
28+
}
29+
}
30+
System.out.println(ret.size());
31+
StringBuilder retStr = new StringBuilder();
32+
for (int i = 0; i < ret.size(); i++) {
33+
retStr.append(ret.get(i));
34+
if (i != ret.size() - 1) {
35+
retStr.append(" ");
36+
}
37+
}
38+
System.out.println(retStr);
39+
}
40+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// AC: 327 ms
2+
// Memory: 600 KB
3+
// Only when there are two different point and distance > 1, the answer exists.
4+
// T:O(sum(ni)), S:O(1)
5+
//
6+
import java.util.HashMap;
7+
import java.util.Iterator;
8+
import java.util.Scanner;
9+
10+
public class Codeforces_2004A_Closest_Point {
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();
16+
boolean ret = true;
17+
HashMap<Integer, Integer> record = new HashMap<>();
18+
for (int j = 0; j < n; j++) {
19+
int a = sc.nextInt();
20+
if (!ret) {
21+
continue;
22+
}
23+
record.merge(a, 1, Integer::sum);
24+
if (record.size() >= 3) {
25+
ret = false;
26+
}
27+
}
28+
if (ret) {
29+
Iterator<Integer> it = record.keySet().iterator();
30+
int diff = Math.abs(it.next() - it.next());
31+
if (diff == 1) {
32+
ret = false;
33+
}
34+
}
35+
36+
System.out.println(ret ? "YES" : "NO");
37+
}
38+
}
39+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// todo-核对
2+
// WA:看不到具体输入的错误案例,
3+
// link: https://codeforces.com/problemset/problem/2004/B
4+
5+
import java.util.Scanner;
6+
7+
public class Codeforces_2004B_Game_with_Doors {
8+
public static void main(String[] args) {
9+
Scanner sc = new Scanner(System.in);
10+
int t = sc.nextInt();
11+
for (int i = 0; i < t; i++) {
12+
int l1 = sc.nextInt(), r1 = sc.nextInt(), l2 = sc.nextInt(), r2 = sc.nextInt(), ret = 0;
13+
if (l2 - r1 > 1 || l1 - r2 > 1) {
14+
ret = 0;
15+
} else if (l2 - r1 == 1 || l1 - r2 == 1) {
16+
ret = 1;
17+
} else if (l2 - r1 == 0 || l1 - r2 == 0) {
18+
ret = 2;
19+
} else if (l2 - r1 < 0) {
20+
if (l2 < l1) {
21+
if (r2 > r1) {
22+
ret = r1 - l1 + 2;
23+
} else if (r2 == r1) {
24+
ret = r1 - l1 + 1;
25+
} else {
26+
ret = r2 - l1 + 2;
27+
}
28+
} else if (l2 == l1) {
29+
if (r2 > r1) {
30+
ret = r1 - l1 + 1;
31+
} else if (r2 == r1) {
32+
ret = r1 - l1;
33+
} else {
34+
ret = r2 - l1 + 1;
35+
}
36+
} else {
37+
if (r2 > r1) {
38+
ret = r1 - l2 + 2;
39+
} else if (r2 == r1) {
40+
ret = r1 - l2 + 1;
41+
} else {
42+
ret = r2 - l2 + 2;
43+
}
44+
}
45+
} else {
46+
if (l1 < l2) {
47+
if (r1 > r2) {
48+
ret = r2 - l2 + 2;
49+
} else if (r1 == r2) {
50+
ret = r2 - l2 + 1;
51+
} else {
52+
ret = r1 - l2 + 2;
53+
}
54+
} else if (l1 == l2) {
55+
if (r1 > r2) {
56+
ret = r2 - l2 + 1;
57+
} else if (r1 == r2) {
58+
ret = r2 - l2;
59+
} else {
60+
ret = r1 - l2 + 1;
61+
}
62+
} else {
63+
if (r1 > r2) {
64+
ret = r2 - l1 + 2;
65+
} else if (r1 == r2) {
66+
ret = r2 - l1 + 1;
67+
} else {
68+
ret = r1 - l1 + 2;
69+
}
70+
}
71+
}
72+
73+
System.out.println(ret);
74+
}
75+
}
76+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// AC: 203 ms
2+
// Memory: 800 KB
3+
// .
4+
// T:O(n), S:O(1)
5+
//
6+
import java.util.Scanner;
7+
8+
public class Codeforces_2008A_Sakurako_s_Exam {
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 a = sc.nextInt(), b = sc.nextInt();
14+
boolean ret;
15+
if (a % 2 == 0 && b % 2 == 0) {
16+
ret = true;
17+
} else if (a % 2 == 0 && b % 2 == 1) {
18+
ret = a >= 2;
19+
} else if (a % 2 == 1 && b % 2 == 1) {
20+
ret = false;
21+
} else {
22+
ret = false;
23+
}
24+
25+
System.out.println(ret ? "YES" : "NO");
26+
}
27+
}
28+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Runtime 0 ms Beats 100.00%
2+
// Memory 40.76 MB Beats 50.00%
3+
// .
4+
// T:O(1), S:O(1)
5+
//
6+
class Solution {
7+
public boolean canAliceWin(int n) {
8+
int turn = 0, cur = 10;
9+
while (n > 0) {
10+
if (n < cur) {
11+
return cur % 2 != 0;
12+
}
13+
n -= cur;
14+
cur--;
15+
}
16+
17+
if (n == 0) {
18+
return cur % 2 != 0;
19+
}
20+
21+
return true;
22+
}
23+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Runtime 13 ms Beats 100.00%
2+
// Memory 45.57 MB Beats 100.00%
3+
// prefix sum.
4+
// T:O(n), S:O(1)
5+
//
6+
class Solution {
7+
public long shiftDistance(String s, String t, int[] nextCost, int[] previousCost) {
8+
long ret = 0, len = s.length();
9+
long[] sumNextCost = new long[27], sumPrevCost = new long[27];
10+
sumNextCost[0] = 0;
11+
sumPrevCost[0] = 0;
12+
for (int i = 0; i < 26; i++) {
13+
sumNextCost[i + 1] = sumNextCost[i] + nextCost[i];
14+
}
15+
for (int i = 0; i < 26; i++) {
16+
sumPrevCost[i + 1] = sumPrevCost[i] + previousCost[i];
17+
}
18+
for (int i = 0; i < len; i++) {
19+
int c1 = s.charAt(i) - 'a' + 1, c2 = t.charAt(i) - 'a' + 1;
20+
if (c1 < c2) {
21+
long cost1 = sumNextCost[c2 - 1] - sumNextCost[c1 - 1];
22+
long cost2 = sumPrevCost[c1] + (sumPrevCost[26] - sumPrevCost[c2]);
23+
ret += Math.min(cost1, cost2);
24+
} else {
25+
long cost1 = sumPrevCost[c1] - sumPrevCost[c2];
26+
long cost2 = sumNextCost[26] - sumNextCost[c1 - 1] + sumNextCost[c2 - 1];
27+
ret += Math.min(cost1, cost2);
28+
}
29+
}
30+
31+
return ret;
32+
}
33+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Runtime 2 ms Beats 100.00%
2+
// Memory 44.67 MB Beats 100.00%
3+
// .
4+
// T:O((n-l) * (r-l)), S:O(1)
5+
//
6+
class Solution {
7+
public int minimumSumSubarray(List<Integer> nums, int l, int r) {
8+
int len = nums.size();
9+
long ret = -1;
10+
long sumLengthL = 0;
11+
for (int i = 0; i < l; i++) {
12+
sumLengthL += nums.get(i);
13+
}
14+
if (sumLengthL == 1) {
15+
return 1;
16+
} else if (sumLengthL > 0) {
17+
ret = sumLengthL;
18+
}
19+
for (int i = 0; i < len - l; i++) {
20+
long sum2 = sumLengthL;
21+
for (int j = i + l; j < i + r && j < len; j++) {
22+
sum2 += nums.get(j);
23+
if (sum2 == 1) {
24+
return 1;
25+
} else if (sum2 > 0) {
26+
if (ret < 0) {
27+
ret = sum2;
28+
} else {
29+
ret = Math.min(ret, sum2);
30+
}
31+
}
32+
}
33+
if (i + l < len) {
34+
sumLengthL -= nums.get(i) - nums.get(i + l);
35+
}
36+
if (sumLengthL == 1) {
37+
return 1;
38+
} else if (sumLengthL > 0) {
39+
if (ret < 0) {
40+
ret = sumLengthL;
41+
} else {
42+
ret = Math.min(ret, sumLengthL);
43+
}
44+
}
45+
}
46+
47+
return (int) ret;
48+
}
49+
}

0 commit comments

Comments
 (0)