【计数原理】【UVA11538】 Chess Queen
Description
给你一个n*m的棋盘,在棋盘上放置一黑一白两个皇后,求两个皇后能够互相攻击的方案个数
Input
多组数据,每组数据包括:
- 一行,为n和m
输入结束标志为n=m=0。
Output
对于每组数据,输出:
- 对应的放置方案数
Sample Input
Sample Output
Hint
n,m≤1e6,n和m不全为1。保证最终答案在long long int范围之内
两个皇后能相互攻击,当且仅当他们在同一列,同一行,或同一斜线上。
黑白两个皇后位置相反算两种不同的方案。
Solution
考虑两个皇后相互攻击的情况,显然相互之间没有包含关系,故而可以使用加法原理,分别求出方案数后相加。
对于在同一列上的方案数,设这个棋盘是m行n列的,不妨设n≤m,先考虑放置一只皇后,那么对于这n列,每一列都有m种放置方法,即共有n*m种放置方法。再考虑放置另一个皇后,对于每一种方案,两个皇后相互攻击当且仅当后放的皇后在先放的皇后的那一列上的除先放的皇后所在位置之外的m-1个位置上。也就是对于每种放置第一只皇后的方案共有m-1个满足题意的方案。使用乘法原理,那么在同一列上的方案数就是n*m*(m-1)。
同理易得,在同一行上的方案数是n*m*(n-1)。
对角线上的元素同理。不同的是,对于一个n*m的棋盘,不妨设n≤m,其对角线长度如下:
1,2,3,……n,n,n,……,3,2,1。其中共有(m-n+1)个n。
只考虑一条斜线,那么这样的方案数就是(∑(i:1 to n-1) i*(i-1)) + n*(m-n+1)*(n-1)。化简这个式子。以下省略sigma后i的范围
∑i*(i-1)=∑i2-∑i。其中∑i=n(n-1)/2。对于∑i2,有如下结论:
∑n(i=1)i2 = n(n+1)(2n+1)/6
证明?能吃嘛?
那么对于本题i∈[1,n-1],∑i2=(1/6)*n*(n-1)*(2n-4)。
因为是两条对角线,所以需要×2。带入方案数的式子,斜线上的方案数就是
2n(n-1)(3m-n-1)/3。
将上面几种情况相加即得答案
Code
#include<cstdio>
#define rg register
#define ci const int
#define LL unsigned long long int namespace IO {
char buf[];
} inline void qr(LL &x) {
char ch=getchar(),lst=' ';
while(ch>''||ch<'') lst=ch,ch=getchar();
while(ch>=''&&ch<='') x=(x<<)+(x<<)+(ch^),ch=getchar();
if (lst=='-') x=-x;
} inline void write(LL x,const char aft,const bool pt) {
if(x<) {putchar('-');x=-x;}
int top=;
do {
IO::buf[++top]=x%+'';
x/=;
} while(x);
while(top) putchar(IO::buf[top--]);
if(pt) putchar(aft);
} template <typename T>
inline T mmax(const T &a,const T &b) {if(a>b) return a;return b;}
template <typename T>
inline T mmin(const T &a,const T &b) {if(a<b) return a;return b;}
template <typename T>
inline T mabs(const T &a) {if(a<) return -a;return a;} template <typename T>
inline void mswap(T &a,T &b) {T temp=a;a=b;b=temp;} LL n,m; int main() {
qr(n);qr(m);
while(n||m) {
if(n>m) mswap(n,m);
write(n*m*(n-+m)+*n*(n-)*(*m-n-)/,'\n',true);
n=m=;qr(n);qr(m);
}
return ;
}
Summary
1、∑n(i=1)i2 = n(n+1)(2n+1)/6
2、看到1e6的题,如果因为答案大小限制了输入的大小,不妨往数学上想想,万一是O(1)的呢= =
【计数原理】【UVA11538】 Chess Queen的更多相关文章
- UVA11538 - Chess Queen(数学组合)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- UVA11538 Chess Queen
题意 给一个\(n \times m\)的棋盘,输出有多少种方法放置两个互相攻击的皇后. \(n,m \leq 10^6\) 分析 参照刘汝佳的题解. 横.竖.斜三种情况互不相干,加法原理统计. 横竖 ...
- Uva 11538 - Chess Queen
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- UVa11538 A Chess Queen
A Chess Queen Problem A Chess Queen Input: Standard Input Output: Standard Output You probably know ...
- STM32F4_TIM基本延时(计数原理)
Ⅰ.概述 STM32的TIM定时器分为三类:基本定时器.通用定时器和高级定时器.从分类来看就知道STM32的定时器功能是非常强大的,但是,功能强大了,软件配置定时器就相对复杂多了.很多初学者甚至工作了 ...
- 组合数学 UVa 11538 Chess Queen
Problem A Chess Queen Input: Standard Input Output: Standard Output You probably know how the game o ...
- Luogu 1351 NOIP 2014 联合权值(贪心,计数原理)
Luogu 1351 NOIP 2014 联合权值(贪心,计数原理) Description 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi, ...
- uva 11538 Chess Queen<计数>
链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&am ...
- 【基本计数方法---加法原理和乘法原理】UVa 11538 - Chess Queen
题目链接 题意:给出m行n列的棋盘,当两皇后在同行同列或同对角线上时可以互相攻击,问共有多少种攻击方式. 分析:首先可以利用加法原理分情况讨论:①两皇后在同一行:②两皇后在同一列:③两皇后在同一对角线 ...
随机推荐
- 在Unity中使用LitJson解析json文件
LitJson 这个库需要找资源,找到LitJson.dll后将它放在Assets文件夹下,在脚本中使用using引入即可 测试代码 json文件: {"Archice":[{&q ...
- 丑哭了CSDN。
真是不知道如何设置,忒,,,,不知如何表达.
- Spring Boot下的lombok安装 (日志) 不能识别log变量问题
参考地址:http://blog.csdn.net/blueheart20/article/details/52909775 ps:除了要加载依赖之外 还要安装lombok插件
- Centos7下安装mysql服务
yum install -y perl-Module-Install.noarch yum -y install perl perl-devel #命令下载mysql wget http://dev. ...
- Ubuntu 16.04 安装显卡驱动后循环登录和无法设置分辨率的一种解决方案
1. 安装环境 电脑:MSI GP63 显卡:GeForce GTX 1070 系统:Ubuntu 16.04 驱动版本:NVIDIA 384.130 2. 循环登录 如果按照这篇文章 Ubuntu ...
- protected、public、private
一.protected成员 1. 受保护的成员的可访问性 对于一个类的protected成员,①该类的用户(如类对象)不能访问它,②该类的派生类的成员(及其友元)可以访问它. 派生类的成员及其友元不能 ...
- “Hello World!”团队召开的第十二次会议
今天是我们团队“Hello World!”团队召开的第十二次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 一.会议时间 2 ...
- Calculator 2
github地址:https://github.com/YooRarely/object-oriented.git 新增: 计算类(拥有计算功能) 采用符号优先级计算方法 对符号不匹配的如 -2 ,自 ...
- ubuntu中下载sublime相关问题
1.SublimeText3的安装 在网上搜索了一些ubuntu下关于sublime-text-3安装的方法,在这里针对自己尝试的情况进行反馈: 方法一(未成功): 在终端输入以下代码: sudo a ...
- adb shell input keyevent值所对应的字符
转自:http://blog.csdn.net/chen825919148/article/details/18732041 0 --> "KEYCODE_UNKNOWN" ...