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);
}
}
题意:给出一个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);
}
}
相关文章推荐
- UVA 11538 Chess Queen
- uva 11538 Chess Queen
- UVA-11538 Chess Queen(数学)
- UVA 11538 Chess Queen
- UVA 11538 Chess Queen
- UVA 11538【象棋中的皇后】Chess Queen-----2015年1月24日
- UVa 11538 - Chess Queen
- UVA 11538 Chess Queen——计数原理
- UVA 11538(Chess Queen-矩阵对角线长度)
- uva 11538 - Chess Queen 先分步还是先分类? 计数问题
- UVA 11538:Chess Queen
- Uva 11538 - Chess Queen
- UVA 11538 Chess Queen
- UVa 11538 - Chess Queen
- UVA 11538 Chess Queen
- UVa 11538 Chess Queen
- uva11538 - Chess Queen(象棋中的皇后)
- Chess Queen(uva 11538)
- UVA 11538 - Chess Queen(数论+计数问题)
- UVa 11538 Chess Queen (排列组合计数)