Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
abbacca
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 14
#1

Задача "тетрис" - C++

09.02.2014, 20:51. Просмотров 333. Ответов 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;
}
Он не проходит все тесты.
Пожалуйста посмотрите, в чём у меня ошибка. Сколько сидел, так и не смог найти.

 Комментарий модератора 
Размещайте код на форуме, не забывая выделять его соответствующими тегами.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 20:51     Задача "тетрис"
Посмотрите здесь:

Задача "Максимальный подпалиндром" не могу поймать ошибку. C++
C++ Найти ошибку в решении "Числа - палиндрома" (задача с acmp)
Перевод из двоичной системы в десятичную, задача 2.30 "Как программировать на С++" C++
C++ Вычислить значение суммы. Задача с использованием "длинной арифметики".
Реализовать игровое поле в игре "Тетрис" C++
Задача "Кто старше?" (подскажите где ошибка в коде) C++
Какую простую графическую библиотеку или класс использовать для разработки игры "Тетрис"? C++
Задача "Гигабашня": минимальное расстояние до этажа со счастливым номером C++
Задача "Движение по клеткам таблицы" (Динамическое программирование) C++
C++ Нужен пример игры "Тетрис"
C++ Задача решена только нужна "нитра" фишки по ускорению
Страуструп, "Принципы и практика использования С++": задача на нахождение моды C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 04:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru