Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623

Программа не проходит тест на acmp.ru

18.04.2012, 01:44. Показов 3488. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
http://acmp.ru/index.asp?main=task&id_task=446
Табло(спойлер)
На хоккейном стадионе в одном большом городе расположено большое прямоугольное табло. Оно имеет n строк и m столбцов (то есть состоит из n x m ячеек). Во время хоккейного матча это табло служит для отображения счета и времени, прошедшего с начала тайма, а в перерывах на нем показывают различную рекламу.

В связи с этим возникла задача проверки возможности показа на этом табло определенной рекламной заставки. Заставка также, как и табло, имеет размер n строк на m столбцов. Каждая из ячеек заставки окрашена в один из четырех цветов - трех основных: красный - R, зеленый - G, синий - B и черный - .(точка).

Каждая из ячеек табло характеризуется своими цветопередаточными возможностями. Любая из ячеек табло может отображать черный цвет - это соответствует тому, что на нее вообще не подается напряжение. Также каждая из ячеек может отображать некоторое подмножество множества основных цветов. В этой задаче эти подмножества будут кодироваться следующим образом:

0 - ячейка может отображать только черный цвет;
1 - ячейка может отображать только черный и синий цвета;
2 - ячейка может отображать только черный и зеленый цвета;
3 - ячейка может отображать только черный, зеленый и синий цвета;
4 - ячейка может отображать только черный и красный цвета;
5 - ячейка может отображать только черный, красный и синий цвета;
6 - ячейка может отображать только черный, красный и зеленый цвета;
7 - ячейка может отображать только черный, красный, зеленый и синий цвета.

Напишите программу, которая по описанию табло и заставки определяет: возможно ли на табло отобразить эту заставку.
Входные данные

Первая строка входного файла INPUT.TXT содержит целые числа n и m (1 <= n, m <= 100). Далее идут n строк по m символов каждая - описание заставки. Каждый из символов описания заставки принадлежит множеству {R, G, B, .} . Их значения описаны выше.

После этого идет описание табло. Оно содержит n строк по m чисел, разделенных пробелами. Значения чисел описаны выше.
Выходные данные

В выходной файл OUTPUT.TXT выведите YES, если на табло возможно отобразить заставку и NO - в противном случае.

Мой вариант решения
main.cpp
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <fstream>
#include <string>
 
 
int main()
{
  char **tablo = NULL;
  int temp = 0;
  bool superBreak = false; // супер пупер выход из всех циклов
  size_t rows = 0;
  size_t columns = 0;
  std::ifstream fin("input.txt");
  std::ofstream fout("output.txt");
 
  fin >> rows >> columns; // получение размеров массива
  tablo = new char*[ rows ]; // создание динамического массива
  for ( size_t i = 0; i < rows; ++i )
  {
     tablo[i] = new char[ columns ];
  }
 
  fin.get(); // перейти на новую строку
  std::string curLine; // для хранения текущей строки
  for ( size_t i = 0; i < rows; ++i ) // инициализация табла
  {
      std::getline( fin, curLine );
      for ( size_t j = 0; j < columns; ++j )
      {
         tablo[i][j] = curLine[j];
      }
  }
/* если это раскоментировать, то будет произведен вывод только отладочной информации и выход */
//  for ( size_t i = 0; i < rows; ++i )
//  {
//      for ( size_t j = 0; j < columns; ++j )
//      {
//         fout << tablo[i][j];
//      }
//      fout << std::endl;
//  }
//  return 0;
 
  for ( size_t i = 0; i < rows && !superBreak; ++i )
  {
      for ( size_t j = 0; j < columns && !superBreak; ++j )
      {
         fin >> temp;
         switch( tablo[i][j] )
         {
            case '.':
               break;
            case 'R':
               if ( temp < 4 )
               {
                  superBreak = true;
               }
               break;
            case 'G':
               if ( !( temp == 2 || temp == 3 || temp == 6 || temp == 7 ) )
               {
                  superBreak = true;
               }
               break;
            case 'B':
               if ( temp % 2 == 0 )
               {
                  superBreak = true;
               }
               break;
            default:
//               throw (-1); // ловушка для ошибок, когда именно в этой строчке
                             // случается RuntimeError, то массив инициализирован некорректно
               break;
         }
      }
  }
 
  if ( !superBreak ) // если не произведен досрочный выход из цикла, то там всё ок
     fout << "YES";
  else               // иначе какой-то пиксель не способен отобразить заданный цвет
     fout << "NO";
 
  fout.close();
  fin.close();
 
  return 0;
}

Как вы считаете, нет ли здесь какой-нибудь ошибки?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2012, 01:44
Ответы с готовыми решениями:

Сбор черники. Программа не проходит 11 тест
Текст задачиСбор черники (Время: 1 сек. Память: 16 Мб Сложность: 17%) В фермерском хозяйстве в Карелии выращивают чернику. Она...

Программа не проходит тест
Нужно было сделать программу для определения, является ли десятичная дробь конечной при переводе в двоичную СС. Если да, то перевести и...

Программа (Клуб Юных Хакеров) не проходит тест
Решаю следующую задачу: Клуб Юных Хакеров организовал на своем сайте форум. Форум имеет следующую структуру: каждое сообщение либо...

2
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
18.04.2012, 04:17
Цитата Сообщение от Buckstabue Посмотреть сообщение
Как вы считаете, нет ли здесь какой-нибудь ошибки?
если не проходит какой-нибудь тест, то ошибка точно есть. Вот так проходит все тесты:
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <fstream>
#include <string>
 
 
int main()
{
  char **tablo = NULL;
  int temp = 0;
  bool superBreak = false; // супер пупер выход из всех циклов
  size_t rows = 0;
  size_t columns = 0;
  std::ifstream fin("input.txt");
  std::ofstream fout("output.txt");
 
  fin >> rows >> columns; // получение размеров массива
  tablo = new char*[ rows ]; // создание динамического массива
  for ( size_t i = 0; i < rows; ++i )
  {
     tablo[i] = new char[ columns ];
  } 
  
  std::string curLine; // для хранения текущей строки
  std::getline(fin, curLine ); // перейти на новую строку
  for (size_t  i = 0; i < rows; ++i ) // инициализация табла
  {
      std::getline( fin, curLine );
      for (size_t j = 0; j < columns; ++j )
      {
         tablo[i][j] = curLine[j];
      }
  }
/* если это раскоментировать, то будет произведен вывод только отладочной информации и выход */
/*  for (size_t  i = 0; i < rows; ++i )
  {
      for ( size_t j = 0; j < columns; ++j )
      {
         fout << tablo[i][j];
      }
      fout << std::endl;
  }
  return 0;*/
 
  for (size_t i = 0; i < rows && !superBreak; ++i )
  {
      for ( size_t j = 0; j < columns && !superBreak; ++j )
      {
         fin >> temp;
         switch( tablo[i][j] )
         {
            case '.':
               break;
            case 'R':
               if ( temp < 4 )
               {
                  superBreak = true;
               }
               break;
            case 'G':
               if ( !( temp == 2 || temp == 3 || temp == 6 || temp == 7 ) )
               {
                  superBreak = true;
               }
               break;
            case 'B':
               if ( temp % 2 == 0 )
               {
                  superBreak = true;
               }
               break;
            default:
//               throw (-1); // ловушка для ошибок, когда именно в этой строчке
                             // случается RuntimeError, то массив инициализирован некорректно
               break;
         }
      }
  }
 
  if ( !superBreak ) // если не произведен досрочный выход из цикла, то там всё ок
     fout << "YES";
  else               // иначе какой-то пиксель не способен отобразить заданный цвет
     fout << "NO";
 
  fout.close();
  fin.close();
 
  return 0;
}
1
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
18.04.2012, 08:17  [ТС]
valeriikozlov, огромное спасибо, я уж думал каждую строчку при помощи std::iostringstream считывать, чтоб наверняка всё было как надо, по-человечески. Странно, что лично у меня без вот этого cin.get() программа считывала перевод на новую строку и записывала в табло в качестве первого пикселя. Тут уж либо компиляторы больно разные, либо формат файла несколько разнится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.04.2012, 08:17
Помогаю со студенческими работами здесь

Программа на контестере проходит только 1 тест из 9. Можете объяснить, в чем моя ошибка и как ее исправить!
Объясните, в чем моя ошибка в решении задачи. Условие: 103. Подсчет войск ограничение времени на тест: 0.5 сек. ...

Не проходит тест
Не проходит тест на соответствие. Вроде пишет, что Результат Сообщение: Ошибка в Assert.AreEqual. Ожидается: &lt;System.String&gt;....

X,y,z не проходит 9 тест
Однажды, посетив магазин канцелярских товаров, Вася купил X карандашей, Y ручек и Z фломастеров. Известно, что цена ручки на 2 рубля больше...

Не проходит стресс тест
Ryzen 3600 RX 5700 (реф) БП be quiet! PURE POWER 11 600W Мать AORUS PRO GIGABYTE Кулер AARDWOLF Performa 10X (Да, я уже пожалел,...

Не проходит последний тест
#include&lt;iostream&gt; #include&lt;string&gt; #include&lt;cmath&gt; using namespace std; int main() { int a, b, c; cin &gt;&gt; a &gt;&gt; b &gt;&gt; c; ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru