fork download
  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<iostream>
  6. #include<fstream>
  7. #include<map>
  8. #include<ctime>
  9. #include<set>
  10. #include<queue>
  11. #include<cmath>
  12. #include<vector>
  13. #include<bitset>
  14. #include<functional>
  15. #define x first
  16. #define y second
  17. #define mp make_pair
  18. #define pb push_back
  19. #define REP(i,l,r) for((i)=(l);(i)<=(r);++(i))
  20. #define REP2(i,l,r) for((i)=(l);(i)!=(r);++(i))
  21. using namespace std;
  22.  
  23. typedef long long LL;
  24. typedef double ld;
  25.  
  26. const int MAX=1000+10;
  27.  
  28. int f[MAX][MAX];
  29.  
  30. int calc2(int N,int K,int L,int P)
  31. {
  32. int i,j,k;
  33. memset(f,0,sizeof f);
  34. if(K>N || K<0 || (LL)L*K>N)
  35. return 0;
  36. f[0][0]=1;
  37. REP(i,1,N)
  38. REP(j,1,K)
  39. {
  40. f[i][j]=( f[i][j]+(LL)f[i-1][j]*(i-1) ) % P;
  41. if(i<L)
  42. continue;
  43. int t=1;
  44. REP(k,2,L)
  45. t=(LL)t*(i-k+1) % P;
  46. f[i][j]=( f[i][j] + (LL)f[i-L][j-1]*t ) % P;
  47. }
  48. return f[N][K];
  49. }
  50.  
  51. int calc(int N,int K,int L,int P)
  52. {
  53. int cp=N/P;
  54. N%=P;
  55. K-=cp;
  56. int ans=calc2(N,K,L,P);
  57. if(cp%2==1)
  58. ans=(P-ans)%P;
  59. return ans;
  60. }
  61.  
  62. int main()
  63. {
  64. int n,k,l,i;
  65. cin>>n>>k>>l;
  66. int ans5=calc(n,k,l,5);
  67. int ans401=calc(n,k,l,401);
  68. REP(i,0,2004)
  69. if(i%5==ans5 && i%401==ans401)
  70. break;
  71. cout<<i<<endl;
  72. return 0;
  73. }
  74.  
Success #stdin #stdout 0s 7328KB
stdin
7 2 5
stdout
0