При описании массива, в котором некоторые значения могут быть неизвестны, ваша задача — подсчитать количество массивов, соответствующих описанию.
Неизвестные значения будут указаны как «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]
Мобильная версия