(File IO): input:chess.in output:chess.out
時間限制: 1000 ms 空間限制: 128001 KB 具體限制
Goto ProblemSet
題目描述
給定一個的棋盤,每個格子裏最多隻可以放置一個棋子,求有多少种放置方案使得任意的正方形區域內恰有個棋子。
輸入
棋盤的長與寬
輸出
一個整數,代表可行的方案數。
樣例輸入
2 2
樣例輸出
6
數據範圍限制
對於的數據
對於的數據
解題思路
巨老們都說公式就是。。。(PS:西米鬼鬼)
然後套一下高精度就可以了。
代碼
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,m,a[10010],b[10010],c[10020],t,t1,t2,x,i1;
int main()
{
freopen("chess.in","r",stdin);
freopen("chess.out","w",stdout);
scanf("%d%d",&n,&m);
t=1;
a[1]=1;
for(int i=1;i<=n;i++)
{
x=0;
for(int j=1;j<=t;j++)
{
a[j]=a[j]*2+x;
x=a[j]/10;
a[j]=a[j]%10;
a[t+1]=x;
}
if(a[t+1]>0)
t++;
}
t1=0;
b[1]=1;
for(int i=1;i<=m;i++)
{
x=0;
for(int j=1;j<=t;j++)
{
b[j]=b[j]*2+x;
x=b[j]/10;
b[j]=b[j]%10;
b[t+1]=x;
}
if(b[t+1]>0)
t++;
}
a[1]=a[1]-2;
i1=1,x=0;
while((i1<=t)||(i1<=t1))
{
c[i1]=a[i1]+b[i1]+x;
x=c[i1]/10;
c[i1]=c[i1]%10;
i1=i1+1;
}
if(x>0)
{
t2=i1;
c[i1]=x;
}
else t2=i1-1;
for(int i=t2;i>0;i--)
printf("%d",c[i]);
}