Количество возможных массивов, в которых соседние элементы имеют разницу не более 1C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Количество возможных массивов, в которых соседние элементы имеют разницу не более 1

Сообщение Anonymous »

Вы знаете, что массив содержит n целых чисел от 1 до m, а разница между двумя соседними значениями не превышает 1.

При описании массива, в котором некоторые значения могут быть неизвестны, ваша задача — подсчитать количество массивов, соответствующих описанию.

Неизвестные значения будут указаны как «0» во входном массиве.
Укажите количество массивов по модулю. 1e9+7

Проблему можно разбить на две части. Во-первых, неизвестное находится между известными, тогда просто вычислить количество массивов.
Разница может быть только 0, 1 или 2. Она не может быть 3, потому что, например, 2 0 5, тогда нет значения, которое дает правильный массив. На входе всегда будет разница между неизвестными и возможными значениями. если разница равна 0, 2 0 2, то возможны 3 значения, если разница 1, 2 0 3, то 1 и 3 — единственные возможные значения, поэтому возможны 2 значения. для разницы в 2 имеется только 1 значение, поэтому никаких изменений в результате нет.

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

Код: Выделить всё

#include 

using namespace std;

const int MOD   = 1e9 + 7;

int main() {

int n,m;cin>>n>>m;
vector arr(n);

for(int i=0;i>arr[i];

int res=1;

if(arr[0]==0 && arr[1]!=0)
res=(res%MOD*3)%MOD;
if(arr[n-1]==0 && arr[n-2]!=0)
res=(res%MOD*3)%MOD;

//for unknowns between knowns
for(int i=1;i

Подробнее здесь: [url]https://stackoverflow.com/questions/56722977/number-of-possible-arrays-such-that-adjacent-elements-have-difference-atmost-1[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»