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

UVA - 11538 Chess Queen

2017-08-18 11:29 441 查看
题目地址:https://vjudge.net/problem/UVA-11538

题意:给出一个n*m的棋盘,棋盘上只有王后,问共有几种对决的情况。

思路:横竖的情况就就不说了,主要看斜着的情况,对于斜着的情况,满足有n-m+1(n>m)行格数最多,最多个数为min(n,m),两边是由2到min(n,m)递增。

#include<stdio.h>
#include<algorithm>
#define ll long long
#define maxn 1000010
using namespace std;
ll a[maxn];
int main()
{
ll i,n,m;
a[2]=1;
for(i=3;i<maxn;i++)
{
a[i]=i*(i-1)/2;
}
while(scanf("%lld%lld",&n,&m)!=EOF)
{
ll ans=0,temp=0;
if(n==0&&m==0)
break;
ans+=2*a
*m;
ans+=2*a[m]*n;
ll p=min(n,m);
ll q=max(n,m);
temp+=2*a[p]*(q-p+1);
for(i=2;i<p;i++)
{
temp+=4*a[i];
}
temp*=2;
printf("%lld\n",ans+temp);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: