1. 程式人生 > >UVa 11538 象棋中的皇后

UVa 11538 象棋中的皇后

    最近發現自己沒有什麼長進,一直在徘徊中,發現自己的知識儲備太少,簡直菜的不行,目前在看組合數,排列,加法,乘法,容斥原理。

題目通過三個方面考慮:

同一行放兩個皇后的方案數為A(n,m);

                   同一列放兩個皇后的方案數為B(n,m);

同一對角線放兩個皇后的方案數為D(n,m);

對於A(n,m)=n*m(m-1);

對於B(n,m)=n*m(n-1);

對於D(n,m)有點麻煩。一下為證明過程:

在這裡還使用到了一個數學公式:

題目程式碼如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll maxn=1e7+10;

int main()
{
	ios::sync_with_stdio(false);
	ll n,m;
	while(cin>>n>>m){
		if(n==0&&m==0)break;
		if(n>m)swap(n,m);
		cout<<n*m*(m+n-2)+2*n*(n-1)*(3*m-n-1)/3<<endl;
	}
 	return 0;
}

好好努力,為自己多儲存點東西;