Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #define M 1000003
- using namespace std;
- long long Invers_Modular(long long x)
- {
- long long InvM=1;
- int p=M-2;
- while(p>0)
- {
- if(p%2==1)
- InvM=InvM*x%M;
- x=x*x%M;
- p=p/2;
- }
- return InvM;
- }
- int main()
- {
- int n,m,k,s;
- ifstream f("probleme.in");
- f>>n>>m>>k>>s;
- f.close();
- long long F[M+2],solutie=0;
- F[0]=1;
- for(int i=1;i<=M;++i)
- F[i]=F[i-1]*i%M;
- for(int i=0;i<=min(m-s,k-s);++i) /// Calcul suma C(m,s)*C(n-m,k-s)+C(m,s+1)*C(n-m,k-s-1)+...+C(m,min(m,k-m))*C(n-m,k-min(m,k))
- {
- if(n-m>=k-s-i)
- {
- /// In cate moduri se pot alege s+i problemele usoare din cele m
- long long Numarator=F[m],Numitor=F[s+i]*F[m-s-i]%M;
- long long Usoare=Numarator*Invers_Modular(Numitor)%M;
- /// In cate moduri se pot alege k-s-i probleme dificile din cele n-m
- long long Dificile_Numarator=F[n-m],Dificile_Numitor=F[k-s-i]*F[n-m-k+s+i]%M;
- long long Dificile=Dificile_Numarator*Invers_Modular(Dificile_Numitor)%M;
- solutie=(solutie+Usoare*Dificile%M)%M;
- }
- }
- ofstream g("probleme.out");
- g<<solutie%M;
- g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement