Выдает ошибку исполнения задачи. У меня на компиляторе все результаты тестов совпадают, а система выдает "ошибка исполнения".
Есть массив состоящий из n целых чисел a1, a2, ..., an. Массив a имеет одно специальное свойство:
a[i] = ( a[i-1] + 1) % m, для каждого i (1 < i ≤ n).
Дан массив a с несколькими потерянными элементами из него, каждый потерянный элемент заменяется на -1.
Вводные данные: Первая строка содержит целое число T, где T - количество тестов. Первая строка каждого теста содержит два целых числа n и m (1 ≤ n ≤ 1000) (1 ≤ m ≤ 10^9), где n - размер массива, а m - описанный модуль в формулировке задачи.
Вторая строка каждого теста содержит n целых чисел a1, a2, ..., an (- 1 ≤ ai < m), что дает массив a. Если i-й элемент потерян, то ai будет -1. В противном случае ai будет неотрицательным целым числом меньше m.
Гарантируется, что ввод правильный, и в данном массиве есть хотя бы один не потерянный элемент.
Вывод: Для каждого теста выведите одну строку, содержащую n целых чисел a1, a2, ..., an, массив a после нахождения всех потерянных элементов. Гарантируется, что ответ существует.
Примеры Ввода/Вывода:
+------------------+-------------------+
| стандартный ввод | стандартный вывод |
+------------------+-------------------+
| 4 | 1 2 3 4 5 |
| 5 10 | 7 8 9 0 |
| 1 2 3 4 5 | 5 6 0 1 2 3 |
| 4 10 | 5 6 7 8 9 0 |
| 7 -1 9 -1 | |
| 6 7 | |
| 5 -1 -1 1 2 3 | |
| 6 10 | |
| 5 -1 7 -1 9 0 | |
+------------------+-------------------+
Я решил считать все элементы, после в двойном цикле находить неравные -1 и поочередно их менять. В теории все выглядит просто, но падает с "ошибкой исполнения". Вот мое решение:
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
int t;
scanf("%d", &t);
for( int q = 0; q < t; q++ )
{
int n, m;
scanf("%d", &n);
scanf("%d", &m);
int a[m];
for( int i = 0; i < n; i++ )
{
scanf("%d", &a[i]);
}
for( int g = 0; g < n; g++)
{
for( int i = 0; i < n; i++ )
{
if( a[i] == -1 && a[i+1] != -1 && i != n-1 )
{
a[i] = (a[i+1] - 1) % m;
}
if( a[i-1] != -1 && a[i] == -1 && i != 0 )
{
a[i] = (a[i-1] + 1) % m;
}
if( a[i] == 0 && a[i-1] == -1 )
{
a[i-1] = m-1;
}
}
}
for( int i = 0; i < n; i++ )
{
printf("%d ", a[i]);
}
printf("\n");
}
return 0;
}
if( a[i] == -1 && a[i+1] != -1 && i != n-1 )
эта строка явно неудачная - произойдёт обращение за пределы массива
считать все элементы, после в двойном цикле находить неравные -1
Разве недостаточно найти один нормальный элемент и восстановить весь массив в обе стороны от него? Ведь модуль задан.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть бизнес, в котором пользователь, зарегистрировавшись (используя почту и пароль) может получить консультацию специалиста в неком чате
Есть известная игра CS:GO в которой можно хостить свои сервера и добавлять на них плагиныЭти плагины пишутся на C++ (plugin wiki), существует даже проект...
Прошу помочь с такой задачейИмеется json1, который является телом запроса к апи: {"key1":"value1","key2":"value2","key3":"value3"} и json2, являющийся телом ответа: {"key0":"value0","key1":"value1","key2":"value2","key3":"value3","key4":"value4"}