Cod sursa(job #3317386)

Utilizator jarnea_justinjarnea justin ioan jarnea_justin Data 23 octombrie 2025 16:08:03
Problema Dirichlet Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
#include <fstream>
#define m 1000000007
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,a[100001],k;
long long putere(long long x,long long n)
{
    if(n==0)
        return 1;
    if(n==1)
        return x%m;
    long long a=putere(x,n/2);
    a=(a*a)%m;
    if(n%2==1)
        a=(a*x)%m;
    return a;
}
int comb(long long n,long long k)
{
    long long s=1,t=1;
    for(int i=1;i<=n;i++)
    {
        s=(s*i)%m;
        if(i<=k)
            t=(t*i)%m;
        if(i<=n-k)
            t=(t*i)%m;
    }
    t=putere(t,m-2);
    return (s*t)%m;
}
int main()
{
    f>>n>>k;
    for(int i=1;i<=n;i++)
        f>>a[i];
    int prod=1;
    a[n+1]=k;
    int p=1,u;
    for(int i=1;i<=n+1;i++)
    {
        int l=0;
        if(a[i]==-1)
                while(a[i]==-1)
            {
                l++;
                i++;
            }
        u=a[i];
        if(u-p<0)
            {
                g<<0;
                return 0;
            }
        if(l)
        prod=(prod*(comb(l+u-p,u-p)))%m;
        p=u;
    }
    g<<prod;
    return 0;
}