Skip to content

Commit 2ad9950

Browse files
committed
update
1 parent e3c0ead commit 2ad9950

7 files changed

+221
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// AC: 281 ms
2+
// Memory: 1000 KB
3+
// Greedy.
4+
// T:O(d), S:O(d)
5+
//
6+
import java.util.Scanner;
7+
8+
public class Codeforces_0004B_Before_an_Exam {
9+
public static void main(String[] args) {
10+
Scanner sc = new Scanner(System.in);
11+
int d = sc.nextInt(), sumTime = sc.nextInt(), sumMin = 0, sumMax = 0;
12+
int[] dayMin = new int[d], dayMax = new int[d];
13+
for (int i = 0; i < d; i++) {
14+
int minTime = sc.nextInt();
15+
int maxTime = sc.nextInt();
16+
dayMin[i] = minTime;
17+
dayMax[i] = maxTime;
18+
sumMin += minTime;
19+
sumMax += maxTime;
20+
}
21+
boolean ret = sumTime >= sumMin && sumTime <= sumMax;
22+
if (!ret) {
23+
System.out.println("NO");
24+
} else {
25+
System.out.println("YES");
26+
int remain = sumTime - sumMin;
27+
StringBuilder retAnswer = new StringBuilder();
28+
29+
for (int i = 0; i < d; i++) {
30+
int dayTime = dayMin[i];
31+
if (remain > 0) {
32+
dayTime = Math.min(remain, dayMax[i] - dayMin[i]) + dayMin[i];
33+
remain -= Math.min(remain, dayMax[i] - dayMin[i]);
34+
}
35+
retAnswer.append(dayTime);
36+
if (i != d - 1) {
37+
retAnswer.append(" ");
38+
}
39+
}
40+
41+
System.out.println(retAnswer);
42+
}
43+
}
44+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// AC: 718 ms
2+
// Memory: 1200 KB
3+
// map.
4+
// T:O(n), S:O(n)
5+
//
6+
import java.util.HashMap;
7+
import java.util.Scanner;
8+
9+
public class Codeforces_0037A_Towers {
10+
public static void main(String[] args) {
11+
Scanner sc = new Scanner(System.in);
12+
int n = sc.nextInt(), maxOccurTime = 0;
13+
HashMap<Integer, Integer> record = new HashMap<>();
14+
for (int i = 0; i < n; i++) {
15+
int l = sc.nextInt();
16+
record.merge(l, 1, Integer::sum);
17+
}
18+
for (int key : record.keySet()) {
19+
maxOccurTime = Math.max(maxOccurTime, record.get(key));
20+
}
21+
22+
System.out.println(maxOccurTime + " " + record.size());
23+
}
24+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// AC: 560 ms
2+
// Memory: 800 KB
3+
// Bad!题目英文描述比较迷惑。实际一圈要 count 多少个人读完没明白。查了下题解发现说是所有 fingers 总数.
4+
// T:O(n), S:O(1)
5+
//
6+
import java.util.Scanner;
7+
8+
public class Codeforces_0272A_Dima_and_Friends {
9+
public static void main(String[] args) {
10+
Scanner sc = new Scanner(System.in);
11+
int n = sc.nextInt(), sum = 0, ret = 0;
12+
for (int i = 0; i < n; i++) {
13+
sum += sc.nextInt();
14+
}
15+
for (int i = 1; i <= 5; i++) {
16+
if ((i + sum) % (n + 1) != 1) {
17+
ret++;
18+
}
19+
}
20+
21+
System.out.println(ret);
22+
}
23+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// AC: 327 ms
2+
// Memory: 1100 KB
3+
// Greedy.
4+
// T:O(m + n), S:O(1)
5+
//
6+
import java.util.Scanner;
7+
8+
public class Codeforces_1206A_Choose_Two_Numbers {
9+
public static void main(String[] args) {
10+
Scanner sc = new Scanner(System.in);
11+
int n = sc.nextInt(), max1 = 0, max2 = 0;
12+
for (int i = 0; i < n; i++) {
13+
max1 = Math.max(max1, sc.nextInt());
14+
}
15+
int m = sc.nextInt();
16+
for (int i = 0; i < m; i++) {
17+
max2 = Math.max(max2, sc.nextInt());
18+
}
19+
20+
System.out.println(max1 + " " + max2);
21+
}
22+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Runtime 0 ms Beats 100.00% of users with Java
2+
// Memory 42.98 MB Beats 100.00% of users with Java
3+
// .
4+
// T:O(n), S:O(1)
5+
//
6+
class Solution {
7+
public boolean isArraySpecial(int[] nums) {
8+
for (int i = 1; i < nums.length; i++) {
9+
if (Math.abs(nums[i] - nums[i - 1]) % 2 == 0) {
10+
return false;
11+
}
12+
}
13+
14+
return true;
15+
}
16+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Runtime 47 ms Beats 50.00% of users with Java
2+
// Memory 107.06 MB Beats 100.00% of users with Java
3+
// Binary Search(Or using Treemap Data struct)
4+
// T:O(m * logn), S:O(n)
5+
//
6+
class Solution {
7+
public boolean[] isArraySpecial(int[] nums, int[][] queries) {
8+
int len = nums.length, from = -1, to = -1;
9+
List<List<Integer>> segment = new ArrayList<>();
10+
for (int i = 0; i < len - 1; i++) {
11+
if (Math.abs(nums[i] - nums[i + 1]) % 2 == 1) {
12+
if (from == -1) {
13+
from = i;
14+
to = i + 1;
15+
} else {
16+
to = i + 1;
17+
}
18+
if (i == len - 2) {
19+
segment.add(Arrays.asList(from, to));
20+
}
21+
} else {
22+
if (from != -1) {
23+
segment.add(Arrays.asList(from, to));
24+
from = -1;
25+
to = -1;
26+
}
27+
}
28+
}
29+
TreeMap<Integer, Integer> segmentRecord = new TreeMap<>();
30+
for (List<Integer> segmentItem : segment) {
31+
segmentRecord.put(segmentItem.get(0), segmentItem.get(1));
32+
}
33+
34+
boolean[] ret = new boolean[queries.length];
35+
for (int i = 0; i < queries.length; i++) {
36+
from = queries[i][0];
37+
to = queries[i][1];
38+
// special condition: from == to
39+
if (from == to) {
40+
ret[i] = true;
41+
continue;
42+
}
43+
Integer key = segmentRecord.floorKey(from);
44+
if (key == null) {
45+
ret[i] = false;
46+
} else {
47+
ret[i] = segmentRecord.get(key) >= to;
48+
}
49+
}
50+
51+
return ret;
52+
}
53+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Runtime 70 ms Beats 100.00% of users with Java
2+
// Memory 60.93 MB Beats 100.00% of users with Java
3+
// Hashmap.
4+
// T:O(n * log(n)), S:O(n * log(n))
5+
//
6+
class Solution {
7+
public long sumDigitDifferences(int[] nums) {
8+
List<HashMap<Integer, Integer>> digitRecord = new ArrayList<>();
9+
int len = nums.length, maxDigit = 0;
10+
for (int i = 0; i < len; i++) {
11+
int num = nums[i], exp = 0;
12+
while (num > 0) {
13+
int digit = num % 10;
14+
if (digitRecord.size() < exp + 1) {
15+
digitRecord.add(new HashMap<>());
16+
}
17+
digitRecord.get(exp).merge(digit, 1, Integer::sum);
18+
exp++;
19+
num /= 10;
20+
if (i == 0) {
21+
maxDigit = exp;
22+
}
23+
}
24+
}
25+
long ret = 0;
26+
for (int i = 0; i < maxDigit; i++) {
27+
HashMap<Integer, Integer> digitRecord1 = digitRecord.get(i);
28+
List<Integer> digits = new ArrayList<>(digitRecord1.keySet());
29+
Collections.sort(digits);
30+
for (int j = 0; j < digits.size(); j++) {
31+
for (int k = j + 1; k < digits.size(); k++) {
32+
ret += (long) digitRecord1.get(digits.get(j)) * digitRecord1.get(digits.get(k));
33+
}
34+
}
35+
}
36+
37+
return ret;
38+
}
39+
}

0 commit comments

Comments
 (0)