最后一篇题解思路,65 pts
#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace BIGINT{
int a[10005],b[10005],c[10005];
string jia(string s1,string s2){
if(s1 == "0" && s2 == "0") return "0";
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
int l1 = s1.size(),l2 = s2.size();
for(int i = 0;i < l1;i++) a[l1 - i - 1] = s1[i] - '0';
for(int i = 0;i < l2;i++) b[l2 - i - 1] = s2[i] - '0';
int l = max(l1,l2);
for(int i = 0;i < l;i++){
c[i] += a[i] + b[i];
if(c[i] >= 10){
c[i] %= 10;
c[i + 1]++;
}
}
while(c[l] == 0) l--;
string ans = "";
for(int i = l;i >= 0;i--) ans += c[i] + '0';
return ans;
}
string jian(string s1,string s2){
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
string ans = "";
if(s1.size() == s2.size()){
if(s2 > s1){
ans += "-";
swap(s1,s2);
}
}else{
if(s1.size() < s2.size()){
ans += "-";
swap(s1,s2);
}
}
int l1 = s1.size(),l2 = s2.size(),l = max(l1,l2);
for(int i = 0;i < l1;i++) a[i] = s1[l1 - i - 1] - '0';
for(int i = 0;i < l2;i++) b[i] = s2[l2 - i - 1] - '0';
for(int i = 0;i < l;i++){
c[i] = a[i] - b[i];
if(c[i] < 0){
a[i + 1]--;
c[i] += 10;
}
}
while(c[l] == 0 && l >= 1) l--;
for(int i = l;i >= 0;i--) ans += c[i] + '0';
return ans;
}
string cheng(string s1,string s2){
if(s1 == "0" || s2 == "0") return "0";
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
int l1 = s1.size(),l2 = s2.size();
for(int i = 0;i < l1;i++) a[i] = s1[l1 - i - 1] - '0';
for(int i = 0;i < l2;i++) b[i] = s2[l2 - i - 1] - '0';
for(int i = 0;i < l1;i++){
for(int j = 0;j < l2;j++){
c[i + j] += a[i] * b[j];
if(c[i + j] >= 10){
c[i + j + 1] += c[i + j] / 10;
c[i + j] %= 10;
}
}
}
int l = l1 + l2;
while(c[l] == 0 && l > 1) l--;
string ans = "";
for(int i = l;i >= 0;i--) ans += c[i] + '0';
return ans;
}
string chu(string s1,string s2){
if(s1 == "0") return "0";
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
if(s2 == "0") return "[ProErorr] at chu";
long long d = stoi(s2);
int l = s1.size();
for(int i = 0;i < l;i++) a[i] = s1[i] - '0';
long long t = 0;
for(int i = 0;i < l;i++){
t = t * 10 + a[i];
if(t >= d){
c[i] = t / d;
t %= d;
}
}
int le = 0;
while(c[le] == 0 && le <= l) le++;
string ans = "";
for(int i = le;i < l;i++) ans += c[i] + '0';
return ans;
}
}
signed main(){
string r,c; cin >> r >> c;
string ans = BIGINT::cheng(c,BIGINT::jia(c,"1"));
ans = BIGINT::cheng(ans,BIGINT::jia(c,"2"));
ans = BIGINT::cheng(ans,BIGINT::jia(BIGINT::jian(BIGINT::cheng(r,"2"),c),"1"));
cout << BIGINT::chu(ans,"12") << " " << 0;
return 0;
}