iscsi

cc 11/12 Robot

Dec 1st, 2011
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <sstream>
  4. #include <string>
  5. #include <vector>
  6. #include <queue>
  7. #include <set>
  8. #include <map>
  9. #include <cstdio>
  10. #include <cstdlib>
  11. #include <cctype>
  12. #include <cmath>
  13. using namespace std;
  14. typedef unsigned long long LL;
  15. #define FOR(k,a,b) for(int k(a); k < (b); ++k)
  16. #define FORD(k,a,b) for(int k(a-1); k >= (b); --k)
  17. #define REP(k,a) for(int k=0; k < (a); ++k)
  18. #define ABS(a) ((a)>0?(a):-(a))
  19. typedef pair<int,int> pii;
  20. #define x first
  21. #define y second
  22.  
  23. int main()
  24. {
  25. #ifdef HOME
  26.     freopen ("in.txt","r",stdin);
  27. //  freopen ("out.txt","w",stdout);
  28. #endif
  29.     const int mSize=5001;
  30.     const int mod=1e9+7;
  31.     int comb[mSize][mSize];
  32.     REP(i,mSize)
  33.     comb[i][0]=1,comb[i][i]=1;
  34.     FOR(i,1,mSize)e
  35.     FOR(j,1,i)
  36.     {
  37.         comb[i][j]=comb[i-1][j-1]+comb[i-1][j];
  38.         if(comb[i][j]>=mod)
  39.             comb[i][j]-=mod;
  40.     }
  41.     int N,K,K1,K2,res;
  42.     while(true)
  43.     {
  44.         scanf("%d %d",&N,&K);
  45.         if(N==0)
  46.             break;
  47.         if(N==1 || K>2*N-2)
  48.         {
  49.             printf("0\n");
  50.             continue;
  51.         }
  52.         ++K;
  53.         K1=K/2;
  54.         K2=(K+1)/2;
  55.         res=comb[N-1-K1][K1]+comb[N-1-K2][K2];
  56.         if(res>=mod)
  57.             res-=mod;
  58.         res<<=1;
  59.         if(res>=mod)
  60.             res-=mod;
  61.         printf("%d\n",res);
  62.     }
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment