#include <bits/stdc++.h> #include "message.h" #include "futbol.h" using namespace std; #define lld long long #define sz size() #define For(i,s,a) for(lld i=(lld)s;i<(lld)a;++i) #define fmod(x,d) ((x>=d)?x%d:x) lld fap(lld a, lld b, lld mod) { //cout<<a<<" DO "<<b<<" "<<mod<<endl; lld ret=1; while(b) { if(b&1) { ret*=a; ret=fmod(ret,mod); b^=1; } a*=a,a=fmod(a,mod),b>>=1; } ret=fmod(ret,mod); //cout<<ret<<" XD "<<endl; return ret; } /* int MyNodeId(){return 0; } int GetN(){return 4;} int GetK(){return 2;} int GetP(){return 999999937;} */ lld back[10000001]; int main() { int thiss=MyNodeId(); if(thiss)return 0; lld a=GetN(); lld k=GetK(); lld P=GetP(); lld wyn=1,tmp=1; lld sil=1; For(i,1,a+1) { sil*=i; sil=fmod(sil,P); } back[a]=fmod(fap(sil,P-2,P),P); for(int i=a-1;i;--i) back[i]=fmod(back[i+1]*(i+1),P); wyn=1; lld S=sil; k=min(k,a-k); For(i,1,k+1) { tmp=back[i]; sil=back[a-i]; tmp=fmod(tmp,P); sil=fmod(sil,P); wyn+=fmod(fmod(S*tmp,P)*sil,P); wyn=fmod(wyn,P); } wyn=fmod(wyn,P); printf("%lld",(wyn)%P); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #include <bits/stdc++.h> #include "message.h" #include "futbol.h" using namespace std; #define lld long long #define sz size() #define For(i,s,a) for(lld i=(lld)s;i<(lld)a;++i) #define fmod(x,d) ((x>=d)?x%d:x) lld fap(lld a, lld b, lld mod) { //cout<<a<<" DO "<<b<<" "<<mod<<endl; lld ret=1; while(b) { if(b&1) { ret*=a; ret=fmod(ret,mod); b^=1; } a*=a,a=fmod(a,mod),b>>=1; } ret=fmod(ret,mod); //cout<<ret<<" XD "<<endl; return ret; } /* int MyNodeId(){return 0; } int GetN(){return 4;} int GetK(){return 2;} int GetP(){return 999999937;} */ lld back[10000001]; int main() { int thiss=MyNodeId(); if(thiss)return 0; lld a=GetN(); lld k=GetK(); lld P=GetP(); lld wyn=1,tmp=1; lld sil=1; For(i,1,a+1) { sil*=i; sil=fmod(sil,P); } back[a]=fmod(fap(sil,P-2,P),P); for(int i=a-1;i;--i) back[i]=fmod(back[i+1]*(i+1),P); wyn=1; lld S=sil; k=min(k,a-k); For(i,1,k+1) { tmp=back[i]; sil=back[a-i]; tmp=fmod(tmp,P); sil=fmod(sil,P); wyn+=fmod(fmod(S*tmp,P)*sil,P); wyn=fmod(wyn,P); } wyn=fmod(wyn,P); printf("%lld",(wyn)%P); return 0; } |