Language: C++

#include <iostream>
#include<cstdlib>
#include<queue>
#include<set>
#include<vector>
#include<string>
#include<algorithm>
#include<stack>
#include<map>
#include<deque>
#include<cstdio>
using namespace std;
#define rep(i,a) for(int i=0;i<a;i++)
#define mp make_pair
#define pb push_back
#define ll __int64
//#define __int64 long long
#define P pair<int,int>
int n,m;
const ll M=1000000007;

ll F[211111];
ll IF[211111];
 
ll invl(ll a,ll b,ll m){//ap-2乗るを返す
	ll tmp=1;
	
	while(b){
		if(b&1){
			tmp=(tmp*a)%m;
		}
		a=(a*a)%m;
		b/=2;
	}
 
	return tmp%m;
}
 
void pow(ll m){
	F[0]=1;
	IF[0]=1;
 
	for(ll i=1;i<=210000;i++){
		F[i]=(F[i-1]*i)%m;
		IF[i]=invl(F[i],m-2,m)%m;//逆元を、フェルマーの小定理を利用して求める
	}
}
 
ll C(ll n,ll r,ll m){
 
	if(n<0||r<0||r>n)return (ll)0;
	if(r>n/2)r=n-r;
	
	//cout<<F[n]<<" "<<IF[r]<<" "<<IF[n-r]<<endl;
	ll ret=F[n]*IF[r]%m*IF[n-r]%m;
	return ret;
}

ll t[211111];
ll h,w,a,b;

int main(){
	pow(M);
	cin>>h>>w>>a>>b;
	
	for(int i=0;i<w;i++){
		ll k=h-a-1;//縦に進む回数
		ll ret=C(k+i,k,M);
		//cout<<ret<<" ";
		t[i]=(ret+M)%M;
	}

	for(int i=b;i<w;i++){
		ll k=a;
		ll ret=(C(k+w-i-1-1,k-1,M)+M)%M;

		t[i]=(t[i]*ret+M)%M;
	}


	ll ans=t[b];
	for(int i=b+1;i<w;i++)ans=(ans%M+t[i]%M+M)%M;
	cout<<ans<<endl;
}



Compiler output:
a.cc:16:12: error: '__int64' does not name a type; did you mean '__int64_t'?
   16 | #define ll __int64
      |            ^~~~~~~
a.cc:20:7: note: in expansion of macro 'll'
   20 | const ll M=1000000007;
      |       ^~
a.cc:16:12: error: '__int64' does not name a type; did you mean '__int64_t'?
   16 | #define ll __int64
      |            ^~~~~~~
a.cc:22:1: note: in expansion of macro 'll'
   22 | ll F[211111];
      | ^~
a.cc:16:12: error: '__int64' does not name a type; did you mean '__int64_t'?
   16 | #define ll __int64
      |            ^~~~~~~
a.cc:23:1: note: in expansion of macro 'll'
   23 | ll IF[211111];
      | ^~
a.cc:16:12: error: '__int64' does not name a type; did you mean '__int64_t'?
   16 | #define ll __int64
      |            ^~~~~~~
a.cc:25:1: note: in expansion of macro 'll'
   25 | ll invl(ll a,ll b,ll m){//ap-2乗るを返す
      | ^~
a.cc:39:6: error: variable or field 'pow' declared void
   39 | void pow(ll m){
      |      ^~~
a.cc:16:12: error: '__int64' was not declared in this scope; did you mean '__int64_t'?
   16 | #define ll __int64
      |            ^~~~~~~
a.cc:39:10: note: in expansion of macro 'll'
   39 | void pow(ll m){
      |          ^~
a.cc:16:12: error: '__int64' does not name a type; did you mean '__int64_t'?
   16 | #define ll __int64
      |            ^~~~~~~
a.cc:49:1: note: in expansion of macro 'll'
   49 | ll C(ll n,ll r,ll m){
      | ^~
a.cc:16:12: error: '__int64' does not name a type; did you mean '__int64_t'?
   16 | #define ll __int64
      |            ^~~~~~~
a.cc:59:1: note: in expansion of macro 'll'
   59 | ll t[211111];
      | ^~
a.cc:16:12: error: '__int64' does not name a type; did you mean '__int64_t'?
   16 | #define ll __int64
      |            ^~~~~~~
a.cc:60:1: note: in expansion of macro 'll'
   60 | ll h,w,a,b;
      | ^~
a.cc: In function 'int main()':
a.cc:63:13: error: 'M' was not declared in this scope
   63 |         pow(M);
      |             ^
a.cc:63:9: error: 'pow' was not declared in this scope
   63 |         pow(M);
      |         ^~~
a.cc:64:14: error: 'h' was not declared in this scope
   64 |         cin>>h>>w>>a>>b;
      |              ^
a.cc:64:17: error: 'w' was not declared in this scope
   64 |         cin>>h>>w>>a>>b;
      |                 ^
a.cc:64:20: error: 'a' was not declared in this scope
   64 |         cin>>h>>w>>a>>b;
      |                    ^
a.cc:64:23: error: 'b' was not declared in this scope
   64 |         cin>>h>>w>>a>>b;
      |                       ^
a.cc:16:12: error: '__int64' was not declared in this scope; did you mean '__int64_t'?
   16 | #define ll __int64
      |            ^~~~~~~
a.cc:67:17: note: in expansion of macro 'll'
   67 |                 ll k=h-a-1;//縦に進む回数
      |                 ^~
a.cc:68:20: error: expected ';' before 'ret'
   68 |                 ll ret=C(k+i,k,M);
      |                    ^~~
a.cc:70:17: error: 't' was not declared in this scope
   70 |                 t[i]=(ret+M)%M;
      |                 ^
a.cc:70:23: error: 'ret' was not declared in this scope; did you mean 'rep'?
   70 |                 t[i]=(ret+M)%M;
      |                       ^~~
      |                       rep
a.cc:16:12: error: '__int64' was not declared in this scope; did you mean '__int64_t'?
   16 | #define ll __int64
      |            ^~~~~~~
a.cc:74:17: note: in expansion of macro 'll'
   74 |                 ll k=a;
      |                 ^~
a.cc:75:20: error: expected ';' before 'ret'
   75 |                 ll ret=(C(k+w-i-1-1,k-1,M)+M)%M;
      |                    ^~~
a.cc:77:17: error: 't' was not declared in this scope
   77 |                 t[i]=(t[i]*ret+M)%M;
      |                 ^
a.cc:77:28: error: 'ret' was not declared in this scope; did you mean 'rep'?
   77 |                 t[i]=(t[i]*ret+M)%M;
      |                            ^~~
      |                            rep
a.cc:16:12: error: '__int64' was not declared in this scope; did you mean '__int64_t'?
   16 | #define ll __int64
      |            ^~~~~~~
a.cc:81:9: note: in expansion of macro 'll'
   81 |         ll ans=t[b];
      |         ^~
a.cc:82:31: error: 'ans' was not declared in this scope; did you mean 'abs'?
   82 |         for(int i=b+1;i<w;i++)ans=(ans%M+t[i]%M+M)%M;
      |                               ^~~
      |                               abs
a.cc:82:42: error: 't' was not declared in this scope
   82 |         for(int i=b+1;i<w;i++)ans=(ans%M+t[i]%M+M)%M;
      |                                          ^
a.cc:83:15: error: 'ans' was not declared in this scope; did you mean 'abs'?
   83 |         cout<<ans<<endl;
      |               ^~~
      |               abs