Skip to content

Commit 38bccc3

Browse files
committed
Initial commit
0 parents  commit 38bccc3

File tree

68 files changed

+4950
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+4950
-0
lines changed

.gitignore

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# Created by .ignore support plugin (hsz.mobi)
2+
.eunit
3+
deps
4+
*.o
5+
*.beam
6+
*.plt
7+
erl_crash.dump
8+
ebin/*.beam
9+
rel/example_project
10+
.concrete/DEV_MODE
11+
.rebar
12+
target/
13+
pom.xml.tag
14+
pom.xml.releaseBackup
15+
pom.xml.versionsBackup
16+
pom.xml.next
17+
release.properties
18+
dependency-reduced-pom.xml
19+
buildNumber.properties
20+
.mvn/timing.properties
21+
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
22+
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
23+
24+
# User-specific stuff:
25+
.idea/
26+
.idea/workspace.xml
27+
.idea/tasks.xml
28+
.idea/dictionaries
29+
.idea/vcs.xml
30+
.idea/jsLibraryMappings.xml
31+
32+
# Sensitive or high-churn files:
33+
.idea/dataSources.ids
34+
.idea/dataSources.xml
35+
.idea/dataSources.local.xml
36+
.idea/sqlDataSources.xml
37+
.idea/dynamic.xml
38+
.idea/uiDesigner.xml
39+
40+
# Gradle:
41+
.idea/gradle.xml
42+
.idea/libraries
43+
44+
# Mongo Explorer plugin:
45+
.idea/mongoSettings.xml
46+
47+
*.iws
48+
*.ipr
49+
*.iml
50+
51+
# IntelliJ
52+
/out/
53+
54+
# mpeltonen/sbt-idea plugin
55+
.idea_modules/
56+
57+
# JIRA plugin
58+
atlassian-ide-plugin.xml
59+
60+
# Crashlytics plugin (for Android Studio and IntelliJ)
61+
com_crashlytics_export_strings.xml
62+
crashlytics.properties
63+
crashlytics-build.properties
64+
fabric.properties
65+
*.class
66+
67+
# Mobile Tools for Java (J2ME)
68+
.mtj.tmp/
69+
70+
# Package Files #
71+
*.jar
72+
*.war
73+
*.ear
74+
75+
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
76+
hs_err_pid*
77+
env.list

src/sp0/free/MovingAverage.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package sp0.free;
2+
3+
import java.io.*;
4+
import java.util.ArrayList;
5+
import java.util.Arrays;
6+
import java.util.List;
7+
import java.util.stream.Collectors;
8+
9+
/**
10+
* Вам дана статистика по числу запросов в секунду к вашему любимому рекомендательному сервису.
11+
* Измерения велись n секунд.
12+
* В секунду i поступает qi запросов.
13+
* Примените метод скользящего среднего с длиной окна k к этим данным и выведите результат.
14+
*
15+
* В первой строке передаётся натуральное число n, количество секунд, в течение которых велись измерения. 1 ≤ n ≤ 105
16+
* Во второй строке через пробел записаны n целых неотрицательных чисел qi, каждое лежит в диапазоне от 0 до 103.
17+
* В третьей строке записано натуральное число k (1 ≤ k ≤ n) —– окно сглаживания.
18+
*
19+
* Выведите через пробел результат применения метода скользящего среднего к серии измерений.
20+
* Должно быть выведено n - k + 1 элементов, каждый элемент -— вещественное (дробное) число.
21+
*/
22+
public class MovingAverage {
23+
24+
private static List<Double> movingAverage(int n, List<Integer> arr, int windowSize) {
25+
List<Double> result = new ArrayList<>(n - windowSize + 1);
26+
27+
int tmpSum = 0;
28+
for (int i = 0; i < windowSize; i++) {
29+
tmpSum += arr.get(i);
30+
}
31+
result.add((double) tmpSum / windowSize);
32+
33+
for (int i = 0; i < n - windowSize; i++) {
34+
tmpSum -= arr.get(i);
35+
tmpSum += arr.get(i + windowSize);
36+
result.add((double) tmpSum / windowSize);
37+
}
38+
39+
return result;
40+
}
41+
42+
public static void main(String[] args) throws IOException {
43+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
44+
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out))) {
45+
int n = readInt(reader);
46+
List<Integer> arr = readList(reader);
47+
int windowSize = readInt(reader);
48+
List<Double> result = movingAverage(n, arr, windowSize);
49+
for (double elem : result) {
50+
writer.write(elem + " ");
51+
}
52+
}
53+
}
54+
55+
private static int readInt(BufferedReader reader) throws IOException {
56+
return Integer.parseInt(reader.readLine());
57+
}
58+
59+
private static List<Integer> readList(BufferedReader reader) throws IOException {
60+
return Arrays.stream(reader.readLine().split(" "))
61+
.map(Integer::parseInt)
62+
.collect(Collectors.toList());
63+
}
64+
}

src/sp0/free/TwoSum.java

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package sp0.free;
2+
3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStreamReader;
6+
import java.util.Arrays;
7+
import java.util.HashSet;
8+
import java.util.List;
9+
import java.util.Set;
10+
import java.util.stream.Collectors;
11+
12+
/**
13+
* Рита и Гоша играют в игру. У Риты есть n фишек, на каждой из которых написано количество очков.
14+
* Фишки лежат на столе в порядке неубывания очков на них. Сначала Гоша называет число k,
15+
* затем Рита должна выбрать две фишки, сумма очков на которых равна заданному числу.
16+
* Рите надоело искать фишки самой, и она решила применить свои навыки программирования для решения этой задачи.
17+
* Помогите ей написать программу для поиска нужных фишек.
18+
*
19+
* В первой строке записано количество фишек n, 2 ≤ n ≤ 105.
20+
* Во второй строке записано n целых чисел в порядке неубывания —– очки на фишках Риты в диапазоне от -105 до 105.
21+
* В третьей строке —– загаданное Гошей целое число k, -105 ≤ k ≤ 105.
22+
*
23+
* Нужно вывести два числа —– очки на двух фишках, в сумме дающие k.
24+
* Если таких пар несколько, то можно вывести любую из них.
25+
* Если таких пар не существует, то вывести «None».
26+
*/
27+
public class TwoSum {
28+
29+
private static List<Integer> twoSum(List<Integer> arr, int targetSum) {
30+
Set<Integer> previous = new HashSet<>();
31+
32+
for (int a : arr) {
33+
int b = targetSum - a;
34+
if (previous.contains(b)) return List.of(a, b);
35+
previous.add(a);
36+
}
37+
38+
return List.of();
39+
}
40+
41+
public static void main(String[] args) throws IOException {
42+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
43+
int n = readInt(reader);
44+
List<Integer> arr = readList(reader);
45+
int targetSum = readInt(reader);
46+
List<Integer> result = twoSum(arr, targetSum);
47+
if (result.isEmpty()) {
48+
System.out.println("None");
49+
} else {
50+
System.out.println(result.get(0) + " " + result.get(1));
51+
}
52+
}
53+
}
54+
55+
private static int readInt(BufferedReader reader) throws IOException {
56+
return Integer.parseInt(reader.readLine());
57+
}
58+
59+
private static List<Integer> readList(BufferedReader reader) throws IOException {
60+
return Arrays.stream(reader.readLine().split(" "))
61+
.map(Integer::parseInt)
62+
.collect(Collectors.toList());
63+
}
64+
65+
}

src/sp1/intro/BinaryNumber.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package sp1.intro;
2+
3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStreamReader;
6+
7+
/**
8+
* Вася реализовал функцию, которая переводит целое число из десятичной системы в двоичную.
9+
* Но, кажется, она получилась не очень оптимальной. Попробуйте написать более эффективную программу.
10+
* Не используйте встроенные средства языка по переводу чисел в бинарное представление.
11+
*
12+
* На вход подаётся целое число в диапазоне от 0 до 10000.
13+
*
14+
* Выведите двоичное представление этого числа.
15+
*/
16+
public class BinaryNumber {
17+
18+
private static String getBinaryNumber(int n) {
19+
if (n == 0) return "0";
20+
21+
StringBuilder sb = new StringBuilder();
22+
while (n != 0) {
23+
int remainder = n % 2;
24+
n = n / 2;
25+
sb.append(remainder);
26+
}
27+
28+
return sb.reverse().toString();
29+
}
30+
31+
public static void main(String[] args) throws IOException {
32+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
33+
int n = readInt(reader);
34+
System.out.println(getBinaryNumber(n));
35+
}
36+
}
37+
38+
private static int readInt(BufferedReader reader) throws IOException {
39+
return Integer.parseInt(reader.readLine());
40+
}
41+
}

src/sp1/intro/ExcessiveLetter.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package sp1.intro;
2+
3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStreamReader;
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
9+
/**
10+
* Васе очень нравятся задачи про строки, поэтому он придумал свою.
11+
* Есть 2 строки s и t, состоящие только из строчных букв.
12+
* Строка t получена перемешиванием букв строки s и добавлением 1 буквы в случайную позицию.
13+
* Нужно найти добавленную букву.
14+
*
15+
* На вход подаются строки s и t, разделённые переносом строки. Длины строк не превосходят 1000 символов. Строки не бывают пустыми.
16+
*
17+
* Выведите лишнюю букву.
18+
*/
19+
public class ExcessiveLetter {
20+
21+
private static char getExcessiveLetter(String s, String t) {
22+
Map<Character, Integer> map = new HashMap<>();
23+
for (int i = 0; i < s.length(); i++) {
24+
char c = s.charAt(i);
25+
map.merge(c, 1, Integer::sum);
26+
}
27+
28+
for (int i = 0; i < t.length(); i++) {
29+
char c = t.charAt(i);
30+
int count = map.merge(c, -1, Integer::sum);
31+
if (count < 0) return c;
32+
}
33+
34+
throw new RuntimeException();
35+
}
36+
37+
public static void main(String[] args) throws IOException {
38+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
39+
String s = reader.readLine();
40+
String t = reader.readLine();
41+
System.out.println(getExcessiveLetter(s, t));
42+
}
43+
}
44+
}

src/sp1/intro/Factorization.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package sp1.intro;
2+
3+
import java.io.*;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
/**
8+
* Тимофей готовит доклад ко дню открытых дверей кафедры Теории чисел. Он собирается рассказать про Основную теорему арифметики.
9+
* В соответствии с этой теоремой, любое число раскладывается на произведение простых множителей
10+
* единственным образом –— с точностью до их перестановки.
11+
* Например, число 8 можно представить как 2 × 2 × 2.
12+
* Число 50 –— как 2 × 5 × 5 (или 5 × 5 × 2, или 5 × 2 × 5). Три варианта отличаются лишь порядком следования множителей.
13+
* Разложение числа на простые множители называется факторизацией числа.
14+
* Факторизацию в уме делать сложно, поэтому помогите Тимофею написать для этого программу.
15+
*
16+
* В единственной строке дано число n (2 ≤ n ≤ 10^9), которое нужно факторизовать.
17+
*
18+
* Выведите в порядке неубывания простые множители, на которые раскладывается число n.
19+
*/
20+
public class Factorization {
21+
22+
private static List<Integer> factorize(int n) {
23+
List<Integer> result = new ArrayList<>();
24+
int i = 2;
25+
26+
while (n >= i * i) {
27+
if (n % i == 0) {
28+
n = n / i;
29+
result.add(i);
30+
} else {
31+
i++;
32+
}
33+
}
34+
35+
result.add(n);
36+
37+
return result;
38+
}
39+
40+
public static void main(String[] args) throws IOException {
41+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
42+
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out))) {
43+
int n = readInt(reader);
44+
List<Integer> factorization = factorize(n);
45+
for (int elem : factorization) {
46+
writer.write(elem + " ");
47+
}
48+
}
49+
}
50+
51+
52+
private static int readInt(BufferedReader reader) throws IOException {
53+
return Integer.parseInt(reader.readLine());
54+
}
55+
}

0 commit comments

Comments
 (0)