заглавие
\ (~ \)
BZOJ 3028
Описание
Это , очевидно , должно выйти на поездки, а последняя разница в том , что на этот раз он собирается вселенная приключения! Мы не обсуждаем , сколько он NC, он должен принять некоторые из его иллюзии ничего. Конечно, конечно , вы хотите , чтобы помочь ему вычислить количество программ , переносимых N элементов. На этот раз он был готов принять некоторые популярные продукты, такие как: персик Дора, куриные котлеты и т.д. Конечно, Чэндэ, у него какие - то странные ограничений: ограничения каждой пищи следующим образом :
Чэндэ Гамбург: четное число
Кокс: 0 или 1
курица: 0, 1 или 2
персика множество: нечетное число
цыпленка: кратно 4
булочек: 0, 1, 2 или 3
Картофельные чипсы свинины: не более а.
Хлеб: кратна 3.
Обратите внимание , что здесь мы , очевидно , слишком ленивы , чтобы рассмотреть , как пища пояса с пищей, но и то, что каждая пища все «один» в качестве единицы (потому что это фантазия вещь), даже при условии, что общая сумма добавляет до N Одно из возможных решений. Таким образом, для данного N, вам нужно подсчитать количество программ, и по модулю 10007.
вход
Введите число N, 1 <= N <= 10 ^ 500
Выход
Если это
Пример ввода
Ввод пробы. 1
. 1
Ввод пробы 2
. 5
Пример вывода
Пример вывода. 1
. 1
Выход Образец 2
35
анализ
Функции генерации можно увидеть:
Чэндэ Гамбург: \ (. {. FRAC 1. 1-Х} 1 + X + X ^ 2 + .... 4 ^ = \ ^ {2} \)
Кокс: \ (. 1 + X \)
Куриный: \ (.. 1 + X + X ^ 2 = \ FRAC {3-1} {Х} ^ 1-Х \)
Мульти Персик: \ (.. X + X + X ^ ^ 3. 5 + ... = \ FRAC {X} ^ {2} 1-Х \)
Куриный: \ (.... 1 + X + Х ^ ^ 4. 8 + ... = \ FRAC 1 {{}} 1. 4-Х ^ \)
Булочки: \ (... 1 + X + X + X ^ 2 ^ 3 = \ FRAC {4-1} {Х} ^ 1-Х \)
Картофельные чипсы Свинина: \ (. 1 + X \)
Хлеб: \ (.... 1 + X + X ^ ^ 3. 6. 9 + ... + X ^ = \ FRAC 1 {{}} 3. 1-Х ^ \)
Это является \ (\ FRAC {X} {(. 1-Х)}. 4 ^ \) .
Тогда в соответствии с формулой, производящей функцией \ (\ FRAC. 1 {} {(. 1-X) n ^} = (. 1 + X + X ^ 2 + ... + Х ^. 3) н- ^ \) , ища \ (м \) коэффициент эквивалентно числу комбинаций \ (. 1-п-с ^ {} _ {}. 1-п-т + \) .
Затем умножается на \ (X \) эквивалентна правой, она становится \ (п-C ^ {} _ {. 1-м-н-2} + \) , требования \ (п \) бит, ответ является \ (C 3_ ^ {п-2} + \) .
код
#include<bits/stdc++.h>
using namespace std;
const int mod=10007;
char buf[1<<15],*fs,*ft;
inline char getc() { return (ft==fs&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),ft==fs))?0:*fs++; }
template<typename T>inline void read(T &x)
{
x=0;
T f=1, ch=getchar();
while (!isdigit(ch) && ch^'-') ch=getchar();
if (ch=='-') f=-1, ch=getchar();
while (isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48), ch=getchar();
x*=f;
}
template<typename T>inline void write(T x)
{
if (!x) { putchar('0'); return ; }
if (x<0) putchar('-'), x=-x;
T num=0, ch[20];
while (x) ch[++num]=x%10+48, x/=10;
while (num) putchar(ch[num--]);
}
inline void exgcd(int a,int b,int &x,int &y)
{
if (!b)
{
x=1,y=0;
return ;
}
exgcd(b,a%b,x,y);
int tmp=x;
x=y;
y=tmp-a/b*y;
}
char ch[510];
int main()
{
scanf("%s",ch+1);
int len=strlen(ch+1),n=0;
for (int i=1; i<=len; ++i) n=((n<<1)+(n<<3)+(ch[i]^48))%mod;
int x,y;
exgcd(6,mod,x,y);
x=(x%mod+mod)%mod;
write((n%mod*(n+1)%mod*(n+2)%mod)*x%mod),puts("");
return 0;
}