题解:
1.分横向,纵向,斜向分别讨论
2.横向纵向比较简单,斜向可以只考虑斜右下,再*4就ok了
总结:
1.这个题目也是看了很久才看出来,感觉关键之处在于考虑到,将复杂问题化为简单的步骤,在这个题目中体现在,只考虑斜右下,然后再将情况数 * 4
2.解决其他问题也是一样,先枚举找出所有需要解决的子问题,对于每个找到子问题,寻找他们的核心!
3.打算从新开始看刘汝佳这本训练指南了,打算至少刷完每一道例题,尤其是数学,模拟,计算几何,对算法有一个全面而深刻的认识
4.这几天突然考虑到,为何计算机常常要用循环来解决问题,因为为了解决普遍的一般性问题,循环比若干的条件语句写起来更加方便。
5.数学也是一样,感觉数学习惯于把问题,总结成一些内涵丰富的定理,将很多看似不同实质相同的事务总在起来,形成一个理论体系
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
typedef unsigned long long ull;
#define MAXN 1000005
ull s[MAXN];
ull n,m;
int main()
{
for(ull i = 1;i < MAXN;i++)
s[i] = s[i - 1] + (i + 1) * i / 2;
while(cin >> n >> m && (n | m))
{
if(n > m)swap(n,m);
ull ans1 = (n * m) * ((n - 1) + (m - 1));
//cout << ans1 << " ans1 " << endl;
ull ans2 = 4 * (m - n) * ((n - 1) * n / 2);
//cout << ans2 << " ans2 " << endl;
ull ans3 = 4 * ((n - 1) * n / 2 * n - s[n - 1]);
//cout << ans3 << " ans3 " << endl;
cout << ans1 + ans2 + ans3 << endl;
}
}