您的位置:首页 > 产品设计 > UI/UE

UVa 11538 - Chess Queen

2010-12-20 17:17 357 查看
Problem A


Chess Queen


Input:
Standard Input

Output:

Standard
Output

You probably know how the game of
chess is played and how chess queen operates. Two chess queens are in attacking
position when they are on same row, column or diagonal of a chess board.
Suppose two such chess queens (one black and the other white) are placed on
(2x2) chess board. They can be in attacking positions in 12 ways, these are
shown in the picture below:



Figure:
in a (2x2) chessboard 2 queens can be in attacking position in 12 ways
Given an (N
xM
)
board you will have to decide in how many ways 2 queens can be in attacking
position in that.

Input



Input file can contain up to 5000
lines of inputs. Each line contains two non-negative integers which denote the
value of M
and N
(0< M, N
£
106

) respectively.

Input is terminated by a line containing two zeroes.
These two zeroes need not be processed.

Output

For each line of input produce
one line of output. This line contains an integer which denotes in how many
ways two queens can be in attacking position in an (MxN
) board, where
the values of M
and N
came from the input. All output values will
fit in 64-bit signed integer.

Sample
Input Output for Sample Input

2 2

100 223

2300 1000

0 0

12

10907100

11514134000

这个题目我感觉比较水,皇后有八个方向可以攻击,分为三种横向的,纵向的,对角的。对于一个
n*m
的棋盘,横纵考虑有
n*(m-1)*m+(n-1)*m*n
方式,对于对角的方向上,有
2
(斜率
1

-1
两种情况)
*2*

1*

1-1

+2*1+3*2+……..+s*(s-1)*2

- 2*(b-s-1)*s*(s-1)
种方式。

其中
s

n

m
中较小者,
b
为较大者;这个题目在
uva

ac
了,不过交了两遍,是因为我用了
__int64
编译错误。还有一开始中间数据没有用
64
位结果样例就没有过。题目虽然不难但是还是提醒我一些东西,要是比赛中犯了这些错误可不值啊。

#include <iostream>
using namespace std;
int main()
{
long long sum;
long long n,m;
while(cin>>n>>m)
{
if(n==0&&m==0)
break;
sum=0;
sum+=n*(m-1)*m+(n-1)*m*n;
//cout<<sum<<endl;
long long s,b;
if(n>m)
{
s=m;
b=n;
}
else
{
if(m>n)
{
s=n;
b=m;
}
else
{
b=n;
s=n;
}
}
//cout<<4*(s*(s+1)/2*(2*s+1)/3-s*(s+1)/2)+2*(b-s-1)*s*(s-1)<<endl;
sum+=4*(s*(s+1)/2*(2*s+1)/3-s*(s+1)/2)+2*(b-s-1)*s*(s-1);
cout<<sum<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: