标签:
2 2
4
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 #define MAXN 100 5 struct HP { 6 int len,s[MAXN]; 7 HP() { 8 memset(s,0,sizeof(s)); 9 len = 1; 10 } 11 HP operator=(const char *num) { //字符串赋值 12 len = strlen(num); 13 for(int i = 0; i < len; i++) s[i] = num[len-i-1]-‘0‘; 14 } 15 HP operator=(int num) { //int 赋值 16 char s[MAXN]; 17 sprintf(s,"%d",num); 18 *this = s; 19 return *this; 20 } 21 HP(int num) { 22 *this = num; 23 } 24 HP(const char*num) { 25 *this = num; 26 } 27 string str()const { //转化成string 28 string res = ""; 29 for(int i = 0; i < len; i++) res = (char)(s[i]+‘0‘) + res; 30 if(res == "") res = "0"; 31 return res; 32 } 33 HP operator +(const HP& b) const { 34 HP c; 35 c.len = 0; 36 for(int i = 0,g = 0; g||i < max(len,b.len); i++) { 37 int x = g; 38 if(i < len) x += s[i]; 39 if(i < b.len) x += b.s[i]; 40 c.s[c.len++] = x%10; 41 g = x/10; 42 } 43 return c; 44 } 45 void clean() { 46 while(len > 1 && !s[len-1]) len--; 47 } 48 49 HP operator *(const HP& b) { 50 HP c; 51 c.len = len + b.len; 52 for(int i = 0; i < len; i++) 53 for(int j = 0; j < b.len; j++) 54 c.s[i+j] += s[i]*b.s[j]; 55 for(int i = 0; i < c.len-1; i++) { 56 c.s[i+1] += c.s[i]/10; 57 c.s[i] %= 10; 58 } 59 c.clean(); 60 return c; 61 } 62 HP operator - (const HP& b) { 63 HP c; 64 c.len = 0; 65 for(int i = 0,g = 0; i < len; i++) { 66 int x = s[i]-g; 67 if(i < b.len) x -= b.s[i]; 68 if(x >= 0) g = 0; 69 else { 70 g = 1; 71 x += 10; 72 } 73 c.s[c.len++]=x; 74 } 75 c.clean(); 76 return c; 77 } 78 HP operator /(const HP &b) { 79 HP c, f = 0; 80 for(int i = len-1; i >= 0; i--) { 81 f = f*10; 82 f.s[0] = s[i]; 83 while(f >= b) { 84 f = f - b; 85 c.s[i]++; 86 } 87 } 88 c.len = len; 89 c.clean(); 90 return c; 91 } 92 HP operator % (const HP &b) { 93 HP r = *this / b; 94 r = *this - r*b; 95 return r; 96 } 97 HP operator /= (const HP &b) { 98 *this = *this / b; 99 return *this; 100 } 101 HP operator %= (const HP &b) { 102 *this = *this % b; 103 return *this; 104 } 105 bool operator < (const HP& b) const { 106 if(len != b.len) return len < b.len; 107 for(int i = len-1; i >= 0; i--) 108 if(s[i] != b.s[i]) return s[i] < b.s[i]; 109 return false; 110 } 111 bool operator > (const HP& b) const { 112 return b < *this; 113 } 114 bool operator <= (const HP& b) { 115 return !(b < *this); 116 } 117 bool operator == (const HP& b) { 118 return !(b < *this) && !(*this < b); 119 } 120 bool operator != (const HP &b) { 121 return !(*this == b); 122 } 123 HP operator += (const HP& b) { 124 *this = *this + b; 125 return *this; 126 } 127 bool operator >= (const HP &b) { 128 return *this > b || *this == b; 129 } 130 }; 131 istream& operator >>(istream &in, HP& x) { 132 string s; 133 in >> s; 134 x = s.c_str(); 135 return in; 136 } 137 ostream& operator <<(ostream &out, const HP& x) { 138 out << x.str(); 139 return out; 140 } 141 HP dp[101][1001]; 142 int main(){ 143 dp[0][0] = 1; 144 for(int i = 1; i < 51; ++i) 145 for(int j = 0; j <= i*9; ++j) 146 for(int k = 0; k < 10; ++k) 147 dp[i][j + k] = dp[i][j + k] + dp[i-1][j]; 148 int n,s; 149 while(~scanf("%d%d",&n,&s)){ 150 if(s&1) puts("0"); 151 else cout<<dp[n][s>>1]*dp[n][s>>1]<<endl; 152 } 153 return 0; 154 }
标签:
原文地址:http://www.cnblogs.com/crackpotisback/p/4847215.html