update
This commit is contained in:
70
2/B/Main.java
Normal file
70
2/B/Main.java
Normal file
@@ -0,0 +1,70 @@
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) throws IOException {
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
|
||||
|
||||
String lineH = reader.readLine();
|
||||
if (lineH == null)
|
||||
return;
|
||||
int h = Integer.parseInt(lineH.trim());
|
||||
|
||||
String lineW = reader.readLine();
|
||||
if (lineW == null)
|
||||
return;
|
||||
int w = Integer.parseInt(lineW.trim());
|
||||
|
||||
int[] sandCounts = new int[w];
|
||||
int[] stoneCounts = new int[w];
|
||||
|
||||
for (int i = 0; i < h; i++) {
|
||||
String line = reader.readLine();
|
||||
if (line == null)
|
||||
break;
|
||||
StringTokenizer st = new StringTokenizer(line);
|
||||
for (int j = 0; j < w; j++) {
|
||||
if (st.hasMoreTokens()) {
|
||||
String cell = st.nextToken();
|
||||
if (cell.equals("x")) {
|
||||
stoneCounts[j]++;
|
||||
} else if (cell.equals("0")) {
|
||||
sandCounts[j]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int c = 0; c < w; c++) {
|
||||
int initialStones = stoneCounts[c];
|
||||
for (int k = 0; k < initialStones; k++) {
|
||||
stoneCounts[c]--;
|
||||
|
||||
int currentHeight = sandCounts[c] + stoneCounts[c];
|
||||
|
||||
if (c < w - 1 && (sandCounts[c + 1] + stoneCounts[c + 1]) - currentHeight > 1 && sandCounts[c + 1] > 0) {
|
||||
sandCounts[c + 1]--;
|
||||
sandCounts[c]++;
|
||||
} else if (c > 0 && (sandCounts[c - 1] + stoneCounts[c - 1]) - currentHeight > 1 && sandCounts[c - 1] > 0) {
|
||||
sandCounts[c - 1]--;
|
||||
sandCounts[c]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
StringBuilder out = new StringBuilder();
|
||||
for (int r = 0; r < h; r++) {
|
||||
for (int c = 0; c < w; c++) {
|
||||
if (r < h - sandCounts[c]) {
|
||||
out.append("-");
|
||||
} else {
|
||||
out.append("0");
|
||||
}
|
||||
if (c < w - 1)
|
||||
out.append(" ");
|
||||
}
|
||||
out.append("\n");
|
||||
}
|
||||
System.out.print(out);
|
||||
}
|
||||
}
|
||||
87
2/B/README.md
Normal file
87
2/B/README.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# B. Осыпающийся песок
|
||||
|
||||
Динозавр Дино решил почистить свой террариум от камней с помощью магнита. В террариуме находятся песок и камни, которые магнитятся магнитом. Нужно написать функцию, которая бы вынимала все камешки магнитом и оставила бы только песок.
|
||||
|
||||
## Формат ввода
|
||||
|
||||
- В первой строке - высота террариума `h` (`1 <= h <= 10^6`);
|
||||
- Во второй строке - ширина террариума `w` (`1 <= w <= 10^6`);
|
||||
- Далее задается двумерный массив `h x v` <= `10^6` (террариум), состоящий из песчинок (символы `0`) и камешков (символы `x`);
|
||||
|
||||
## Формат вывода
|
||||
|
||||
Вывести получившийся двумерный массив `h x w` (`1 <= h <= 10^6, 1 <= w <= 10^6`), который будет состоять из песчинок (символ `0`) и пустых ячеек (символ `-`)
|
||||
|
||||
## Пример 1
|
||||
|
||||
Ввод
|
||||
|
||||
```
|
||||
4
|
||||
5
|
||||
0 0 0 0 x
|
||||
0 x x 0 0
|
||||
0 x 0 x 0
|
||||
x 0 0 x 0
|
||||
```
|
||||
|
||||
Вывод
|
||||
|
||||
```
|
||||
- - - - -
|
||||
0 0 0 - -
|
||||
0 0 0 0 0
|
||||
0 0 0 0 0
|
||||
```
|
||||
|
||||
## Пример 2
|
||||
|
||||
Ввод
|
||||
|
||||
```
|
||||
3
|
||||
5
|
||||
x x x x x
|
||||
0 x x 0 0
|
||||
x x x x x
|
||||
```
|
||||
|
||||
Вывод
|
||||
|
||||
```
|
||||
- - - - -
|
||||
- - - - -
|
||||
0 - 0 0 -
|
||||
```
|
||||
|
||||
## Пример 3
|
||||
|
||||
Ввод
|
||||
|
||||
```
|
||||
3
|
||||
5
|
||||
x x x x x
|
||||
x x x x x
|
||||
x x x x x
|
||||
```
|
||||
|
||||
Вывод
|
||||
|
||||
```
|
||||
- - - - -
|
||||
- - - - -
|
||||
- - - - -
|
||||
```
|
||||
|
||||
## Примечание
|
||||
|
||||
Камешки вытаскиваются постепенно слева направо. Пока все камешки не убраны из текущего столбца - Дино не переводит магнит на следующий столбец.
|
||||
|
||||
Камешки вытаскиваются сверху вниз (от самого верхнего до самого нижнего) по следующим правилам:
|
||||
|
||||
- песчинки могут двигаться только вниз;
|
||||
- песчинки не перемещаются наверх даже при движении камешков наверх (считать, что камешки двигаются вверх сквозь песчинки);
|
||||
- все песчинки под действием гравитации падают вниз в своем столбце;
|
||||
- песчинки из соседних столбцов слева и справа падают в текущий столбик, если разница в высоте - больше единицы;
|
||||
- сначала падают песчинки справа, потом слева в текущую ячейку.
|
||||
6
2/B/test1.in
Normal file
6
2/B/test1.in
Normal file
@@ -0,0 +1,6 @@
|
||||
4
|
||||
5
|
||||
0 0 0 0 x
|
||||
0 x x 0 0
|
||||
0 x 0 x 0
|
||||
x 0 0 x 0
|
||||
5
2/B/test2.in
Normal file
5
2/B/test2.in
Normal file
@@ -0,0 +1,5 @@
|
||||
3
|
||||
5
|
||||
x x x x x
|
||||
0 x x 0 0
|
||||
x x x x x
|
||||
5
2/B/test3.in
Normal file
5
2/B/test3.in
Normal file
@@ -0,0 +1,5 @@
|
||||
3
|
||||
5
|
||||
x x x x x
|
||||
x x x x x
|
||||
x x x x x
|
||||
Reference in New Issue
Block a user