Advertisement
Guest User

Untitled

a guest
Mar 12th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 1.63 KB | None | 0 0
  1. import std.stdio;
  2. import std.algorithm;
  3. import std.range;
  4. import std.bigint;
  5. import std.conv;
  6. import std.file;
  7. import std.string;
  8. //import std.cstream;
  9.  
  10. BigInt[61][61] fig,seqt,seq,mov;
  11. BigInt[62][61] cf,cm;
  12.  
  13.  
  14. void main() {
  15. /*version (ONLINE_JUDGE) {
  16.     freopen("catalonian.in","r",din.file);
  17.     freopen("catalonian.out","w",dout.file);
  18. }*/
  19. /*
  20.     ios::sync_with_stdio(0);
  21.     cin.tie(0);
  22. */
  23.  
  24.     fig[1][0]=1;for (int i=1;i<=61;i++) cf[1][i]=1;
  25.     seqt[0][0]=1;seqt[1][1]=1;
  26.     seq[1][1]=1;for (int i=2;i<=61;i++) cm[1][i]=1;
  27.     for (int i=2;i<=60;i++) {
  28.         for (int j=1;j<=60;j++) {
  29.             BigInt ncr=1;
  30.             for (int k=1;k*j<=i;k++){
  31.                 ncr=ncr*(cm[j][j+1]+k-1)/k; // cm[j][j+1] is number of movements with j steps
  32.                 fig[i][j]+=cf[i-k*j][j]*ncr;
  33.             }
  34.             cf[i][j+1]=cf[i][j]+fig[i][j];
  35.         }
  36.        
  37.         for (int j=1;j<=i;j++) for (int k=1;k<=i;k++)
  38.             seqt[i][j]+=seqt[i-k][j-1]*cf[k][k]; //number of figures with k steps
  39.         for (int j=1;j<=i;j++) {
  40.             seq[i][j]=seqt[i][j];
  41.             for (int k=1;k<j;k++) if (j%k==0 && i%(j/k)==0) seq[i][j]-=seq[i/(j/k)][k];
  42.         }
  43.         for (int j=1;j<=60;j++) {
  44.             for (int k=1;k<=j;k++) if (j%k==0 && i%(j/k)==0)
  45.                 mov[i][j]+=seq[i/(j/k)][k]/k;
  46.             cm[i][j+1]=cm[i][j]+mov[i][j];
  47.         }
  48.     }
  49.  
  50.     /*File mk = File("abstract.in", "w");
  51.     mk.writeln("1\n2\n3\n4\n5\n0");
  52.     mk.close();*/
  53.     File inp = File("abstract.in", "r");
  54.     File oup = File("abstract.out", "w");
  55.     int cas=1,n;
  56.     while (1) {
  57.         n=to!int(chomp(inp.readln()));
  58.         if (n==0) break;
  59.         oup.writefln("Case %d: %s",cas++,cm[n][n+1]);
  60.     }
  61.    
  62.     oup.close();
  63.     /*File ans = File("abstract.out","r");
  64.     while (!ans.eof()) {
  65.         writeln(chomp(ans.readln()));
  66.     }*/
  67.  
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement