救救孩子吧

P1002 [NOIP2002 普及组] 过河卒

``` #include<bits/stdc++.h> using namespace std; long long C(int m,int n){ if(n<0||m<0||n<m) return 0; long long o=1; for(int i=1;i<=m;i++){ o*=n-i+1; o/=i; } return o; } int n,m,x,y,t[5][5]={0,0,1,0,0,0,0,1,1,0,0,0,0,1,1},w[5][5]={{},{},1,1,0,0,0,0,1,1,0,0,0,0,1,0,0}; int main(){ cin>>n>>m>>x>>y; if(n-x<3 && m-y<3){ x=n-x; y=m-y; } if(x<3 && y<3){ int nx=2-x; int ny=2-y; long long o=0; o+=C(n-x,m+n-x-y-3)*t[nx][ny]; o+=C(n-x-3,m+n-x-y-3)*w[nx][ny]; cout<<o; return 0; } long long o=C(n,n+m); for(int i=-2;i<=2;i++){ o-=C(x-i,x+y)*C(n-x+i,n+m-x-y); } o+=C(x+2,x+y-1)*C(n-x-3,n+m-x-y-1); o+=C(x-3,x+y-1)*C(n-x+2,n+m-x-y-1); o+=C(x,x+y-3)*C(n-x-3,n+m-x-y-3); o+=C(x-3,x+y-3)*C(n-x,n+m-x-y-3); cout<<o; return 0; } //C++递推 ```
by Blood_red @ 2021-02-23 17:55:40


|