【UVA11538】Chess Queen——简单组合
2016-03-24 19:54
435 查看
题意:给你一个n×mn \times m 的棋盘,在上面放两个皇后,(一黑一白)问有多少种放的方法
分析:皇后的攻击的范围为同一行或者同一列或者在同一对角线,这三种情况没有交集,利用加法原理,对于同一行的放置数目为A(n,m)=n×m×(m−1)A(n,m) = n\times m\times (m-1),同一列的放置为B(m,n)=m×n×(n−1)B(m,n) = m\times n \times (n-1)。
下面来求对角线的部分:假设n⩽mn\leqslant m,所以对角线的长度依次为 1,2,3,⋯,n−1,n,n⋯,n−1,n−2,⋯,3,2,11,2,3,\cdots ,n-1,n,n\cdots ,n-1,n-2,\cdots ,3,2,1,所以D(n,m)=2×[2∑i=1n−1i(i−1)+(m−n+1)n(n−1)]D(n,m) = 2\times [2\sum \limits_{i=1}^{n-1}i(i-1)+(m-n+1)n(n-1)] ,其中∑i=1n−1i(i−1)=∑i=1n−1i2−∑i=1n−1i=n(n−1)(2n−1)6−n(n−1)2=n(n−1)(2n−4)6\sum\limits_{i=1}^{n-1}i(i-1) = \sum\limits_{i=1}^{n-1}i^2-\sum\limits_{i=1}^{n-1}i = \frac{n(n-1)(2n-1)}{6} - \frac{n(n-1)}{2} = \frac{n(n-1)(2n-4)}{6} 所以 D(n,m)=2⟮n(n−1)(2n−4)3+(m−n+1)n(n−1)⟯=2n(n−1)(3m−n−1)3D(n,m) = 2\lgroup \frac{n(n-1)(2n-4)}{3}+(m-n+1)n(n-1)\rgroup = \frac{2n(n-1)(3m-n-1)}{3},所以ans=A(n,m)+B(m,n)+D(n,m)ans = A(n,m)+B(m,n)+D(n,m)
分析:皇后的攻击的范围为同一行或者同一列或者在同一对角线,这三种情况没有交集,利用加法原理,对于同一行的放置数目为A(n,m)=n×m×(m−1)A(n,m) = n\times m\times (m-1),同一列的放置为B(m,n)=m×n×(n−1)B(m,n) = m\times n \times (n-1)。
下面来求对角线的部分:假设n⩽mn\leqslant m,所以对角线的长度依次为 1,2,3,⋯,n−1,n,n⋯,n−1,n−2,⋯,3,2,11,2,3,\cdots ,n-1,n,n\cdots ,n-1,n-2,\cdots ,3,2,1,所以D(n,m)=2×[2∑i=1n−1i(i−1)+(m−n+1)n(n−1)]D(n,m) = 2\times [2\sum \limits_{i=1}^{n-1}i(i-1)+(m-n+1)n(n-1)] ,其中∑i=1n−1i(i−1)=∑i=1n−1i2−∑i=1n−1i=n(n−1)(2n−1)6−n(n−1)2=n(n−1)(2n−4)6\sum\limits_{i=1}^{n-1}i(i-1) = \sum\limits_{i=1}^{n-1}i^2-\sum\limits_{i=1}^{n-1}i = \frac{n(n-1)(2n-1)}{6} - \frac{n(n-1)}{2} = \frac{n(n-1)(2n-4)}{6} 所以 D(n,m)=2⟮n(n−1)(2n−4)3+(m−n+1)n(n−1)⟯=2n(n−1)(3m−n−1)3D(n,m) = 2\lgroup \frac{n(n-1)(2n-4)}{3}+(m-n+1)n(n-1)\rgroup = \frac{2n(n-1)(3m-n-1)}{3},所以ans=A(n,m)+B(m,n)+D(n,m)ans = A(n,m)+B(m,n)+D(n,m)
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> using namespace std; typedef long long LL; LL n,m; int main() { while(scanf("%lld %lld",&n,&m)&&(n+m)) { if(n>m) { swap(n,m); } cout<<n*m*(m+n-2)+2*n*(n-1)*(3*m-n-1)/3<<endl; } return 0; }
相关文章推荐
- UIKit框架各个类的简介
- DuiLib介绍及其消息处理剖析
- Can you answer these queries?(线段树)
- codeforces 597C C. Subsequences(dp+树状数组)
- LeetCode: Longest Consecutive Sequence [128]
- Castle Windsor Fluent Registration API
- collection系列用法-deque双向队列
- android学习——res/values/contentDescription报错
- juery中循环遍历json数组
- UIKeyboardTypeNumberPad 数字键盘自定义按键
- 来段代码提提神-Java读取config.properties文件中的key=value
- requirejs模块化框架用法分享
- request.getparam()与request.getAttibute()的区别
- 获取 当前显示的 UIViewController
- 在Android studio中进行单元测试和ui测试
- WM_CLOSE、WM_DESTROY、WM_QUIT学习总结(点击关闭按钮会触发WM_CLOSE消息,DestroyWindow API会触发WM_DESTROY和WM_NCDESTROY消息,MSDN上写的很清楚)
- hierarchy viewer不能获取userbuild手机版本的UI布局
- UIAutomator遇到的坑
- 聊聊并发(六)ConcurrentLinkedQueue的实现原理分析
- 直接用request.setAttribute()会报错,在这之前应该先让request获取ServletActionContext.getRequest();方法 // request.getAttribute同理