LVADER - Luke vs. Darth Vader Spoj Solution

 #include <bits/stdc++.h>
using namespace std;

int MOD=1000000007;
int power(int i,int x){
  if(!x)return 1;
  long long tmp=power(i,x/2);
  tmp*=tmp;
  tmp%=MOD;
  if(x&1)tmp*=i;
  return (int)(tmp%MOD);
}
int fact[200001];
int inv[100001];
void compute(){
  fact[0]=1;
  inv[0]=1;
  for(int i=1;i<=200000;i++){
    long long tmp=((long long)fact[i-1])*i;
    fact[i]=tmp%MOD;
    if(i<=100000)
      inv[i]=power(fact[i],MOD-2);
  }
}
int main(){  
  ios::sync_with_stdio(0);
  cin.tie(NULL);
  compute();
  int t=0,T;
  cin>>T;
  while(t<T){
    int x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;
    x2-=x1;
    y2-=y1;
    long long ans=0,tmp;
    for(int k=0;k<=min(x2,y2);k++){
      tmp=fact[x2+y2-k];
      tmp*=inv[k];
      tmp%=MOD;
      tmp*=inv[x2-k];
      tmp%=MOD;
      tmp*=inv[y2-k];
      tmp%=MOD;
      ans+=tmp;
      ans%=MOD;
    }
    cout<<"Case "<<++t<<": "<<ans<<'\n';
  }
}

Comments