09.02.2014, 20:51. Просмотров 392. Ответов 0
Здравствуйте. В общем есть такая задача.
Логические построения Гарри выглядят для него как обычный тетрис, только все падающие объекты-факты ― прямоугольные.
Если нижняя строка полностью заполнена, она исчезает.
Нужно смоделировать ход игры: после каждого падения прямоугольника нужно вывести текущую высоту. Если высота превысит высоту экрана H, то игра завершается.
Падающий прямоугольник заполняет все свободные нижние клетки.
Формат входных данных
В первой строке входного файла записаны целые числа H и W (2 <= h,w <= 100000) ― соответственно, высота и ширина экрана, и количество падающих прямоугольников M (1 <= m <= 100000)
В каждой из последующих M строк даны целые числа Hi, Wi, Xi (1 <= Hi, Wi, Xi <= 100000), представляющие собой, соответственно, высоту и ширину i-го прямоугольника, и координату его левой нижней клетки.
Все прямоугольники падают с самого верха экрана
Формат результата
В выходной файл необходимо для каждого упавшего прямоугольника вывести текущую высоту заполненной части экрана
Если в какой-то момент экран заполнится, то вывести "GAME OVER" (без кавычек) и завершить работу программы.
Вот мой код:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| #include <fstream>
#include <cmath>
#include <vector>
#include <list>
using namespace std;
ifstream cin("input.txt");
ofstream cout("output.txt");
int main(){
int h, w;
cin >> h >> w;
int n;
cin >> n;
vector <int> v;
v.resize(w, 0);
int x = 0, H, W, X, maxH = 0;
for(int i = 0; i < n; i++){
cin >> H >> W >> X;
if(X == 1 && W == w){
cout << maxH << endl;
continue;
}
if(X+W-1 > w){
cout << "GAME OVER";
return 0;
}
for(int j = X-1; j < X+W-1; j++){
if(v[j] == 0){
x++;
}
v[j] += H;
if(v[j] > maxH){
maxH = v[j];
}
}
if(maxH > h){
cout << "GAME OVER";
return 0;
}
while(x == w){
maxH--;
for(int j = 0; j < w; j++){
v[j]--;
if(v[j] == 0){
x--;
}
}
}
cout << maxH << endl;
}
return 0;
} |
|
Он не проходит все тесты.
Пожалуйста посмотрите, в чём у меня ошибка. Сколько сидел, так и не смог найти.
|
Комментарий модератора |
 |
Размещайте код на форуме, не забывая выделять его соответствующими тегами. |
|