UVAoj 11538 - Chess Queen

题解:
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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值