Guest User

Untitled

a guest
May 20th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.46 KB | None | 0 0
  1. #pragma comment(linker, "/STACK:65777216")
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <cstdlib>
  5. #include <ctime>
  6. #include <cstdio>
  7. #include <algorithm>
  8. #include <cmath>
  9. #include <vector>
  10. #include <set>
  11. #include <stack>
  12. #include <map>
  13. #include <queue>
  14. #include <string>
  15. #include <memory.h>
  16. #include <iterator>
  17. #define mem(A,X) memset(A,X,sizeof(A))
  18. #define memo(A) memset(A,0,sizeof(A))
  19. #define forn(I,B) for (int I=1;I<=(B);I++)
  20. #define forg(H,V) for (int H=first[V];h;h=next[H])
  21. #define rep(I,B) for (int I=0;I<(B);I++)
  22. #define labs(X) (((X)>0)?(X):(-(X)))
  23. #define ropen(X) freopen(X,"r",stdin)
  24. #define wopen(X) freopen(X,"w",stdout)
  25. #define pb push_back
  26. #define mp make_pair
  27. #define all(X) (X).begin(),(X).end()
  28. #define sqr(X) ((X)*(X))
  29.  
  30. using namespace std;
  31.  
  32. typedef pair <int,int> pii;
  33. typedef pair <long long,long long> pll;
  34. typedef double ld;
  35. typedef long long ll;
  36. typedef vector<int> vi;
  37. const int N=41;
  38. const ll P=1000000000;
  39. const int INF=111111111;
  40. const double eps=1e-9;
  41. const double pi=3.14159265358979;
  42.  
  43.  
  44. class bigint{
  45.     public:
  46.     int sz;
  47.     ll a[N];
  48.     bigint(ll x=0){
  49.         memset(a,0,sizeof(a));
  50.         sz=0;
  51.         while (x){
  52.             a[++sz]=x%P;
  53.             x/=P;
  54.         }
  55.         if (!sz) ++sz;
  56.     }
  57.     void print(){
  58.         printf("%I64d",a[sz]);
  59.         for (int i=sz-1;i>=1;i--) printf("%.9I64d",a[i]);
  60.     }
  61.     friend ostream& operator << (ostream& output, bigint & q){
  62.         q.print();
  63.         return output;
  64.     }
  65.     ll & operator [] (int x){
  66.         return a[x];
  67.     }
  68.     friend bool operator < (bigint & p,bigint &q){
  69.         if (p.sz<q.sz) return 1;
  70.         if (p.sz>q.sz) return 0;
  71.         for (int i=p.sz;i;i--){
  72.             if (p[i]>q[i]) return 0;
  73.             if (p[i]<q[i]) return 1;
  74.         }
  75.         return 0;
  76.     }
  77.     friend bool operator == (bigint & p,bigint & q){
  78.             return !(p<q) && !(q<p);
  79.     }
  80.     friend bool operator != (bigint & p, bigint & q){
  81.         return p<q || q<p;
  82.     }
  83.     friend bool operator >= (bigint & p,bigint & q){
  84.         return !(p<q);
  85.     }
  86.     friend bool operator <= (bigint &p, bigint & q){
  87.         return !(q<p);
  88.     }
  89.     friend bool operator > (bigint &p, bigint & q){
  90.         return q>p;
  91.     }
  92.     friend bigint operator + (bigint &a,bigint &b){
  93.         bigint res;
  94.         int n=max(a.sz,b.sz);
  95.         for (int i=1;i<=n;i++){
  96.             res[i]=a[i]+b[i]+res[i];
  97.             res[i+1]=res[i]/P;
  98.             res[i]%=P;
  99.         }
  100.         if (res[n+1]) ++n;
  101.         res.sz=n;
  102.         return res;
  103.     }
  104.     friend bigint operator * (bigint &a,bigint &b){
  105.         bigint res;
  106.         int n=a.sz,m=b.sz,k=n+m-1;
  107.         for (int i=1;i<=n;i++)
  108.             for (int j=1;j<=m;j++){
  109.                 res[i+j-1]=a[i]*b[j]+res[i+j-1];
  110.                 res[i+j]+=res[i+j-1]/P;
  111.                 res[i+j-1]%=P;
  112.             }
  113.         if (res[k+1]) ++k;
  114.         res.sz=k;
  115.         return res;
  116.     }
  117.     friend bigint operator - (bigint &a,bigint &b){
  118.         bigint res;
  119.         int k=a.sz;
  120.         for (int i=1;i<=k;i++){
  121.             res[i]+=a[i]-b[i];
  122.             if (res[i]<0){
  123.                 res[i]+=P;
  124.                 res[i+1]--;
  125.             }
  126.         }
  127.         while (res[k]==0) --k;
  128.         res.sz=k;
  129.         return res;
  130.     }
  131.     friend void operator -=(bigint &p,bigint & q){
  132.         p=p-q;
  133.     }
  134.     friend void operator +=(bigint &p,bigint & q){
  135.         p=p+q;
  136.     }
  137.     friend void operator *=(bigint &p, bigint & q){
  138.         p=p*q;
  139.     }
  140.     friend bigint operator ^ (bigint & p, int y){
  141.         bigint x=p,res=1;
  142.         while (y){
  143.             if (y&1) res*=x;
  144.             y>>=1;
  145.             x*=x;
  146.         }
  147.         return res;
  148.     }
  149.      
  150. };
  151.  
  152. bigint f[51][451];
  153. int n,s;
  154.  
  155. int main(){
  156.     scanf("%d%d",&n,&s);
  157.     if ((s&1) || s>900){
  158.         printf("0\n");
  159.         return 0;
  160.     }
  161.     if (s==1){
  162.         printf("1\n");
  163.         return 0;
  164.     }
  165.     s/=2;
  166.     f[0][0]=1;
  167.     forn(i,n) rep(j,s+1) rep(k,10){
  168.         if (k>j) break;
  169.         f[i][j]+=f[i-1][j-k];
  170.     }
  171.     bigint q=f[n][s]*f[n][s];
  172.     cout<<q<<endl;  
  173.     return 0;
  174. }
Add Comment
Please, Sign In to add comment