Advertisement
Guest User

winger

a guest
Feb 1st, 2011
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.08 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.regex.*;
  3. import java.text.*;
  4. import java.math.*;
  5.  
  6.  
  7. public class PalindromfulString
  8. {
  9.     long[][] c;
  10.     long[] f;
  11.     int[] a;
  12.  
  13.     public long count(int n, int m, int k)
  14.     {
  15.         f = new long[12];
  16.         f[0] = 1;
  17.         for (int i = 1; i <= 11; ++i) {
  18.             f[i] = f[i - 1]  * i;
  19.         }
  20.         c = new long[27][27];
  21.         for (int i = 0; i <= 26; ++i) {
  22.             for (int j = 1; j < i; ++j) {
  23.                 c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
  24.             }
  25.             c[i][0] = c[i][i] = 1;
  26.         }
  27.         a = new int[n];
  28.         return rec(0, 0, m, k);
  29.     }
  30.    
  31.     long rec(int u, int v, int m, int k) {
  32.         if (u == a.length) {
  33.             int count = 0;
  34.             loop: for (int i = 0; i + m <= a.length; ++i) {
  35.                 for (int j = 0; j < m; ++j) {
  36.                     if (a[i + j] != a[i + m - j - 1]) {
  37.                         continue loop;
  38.                     }
  39.                 }
  40.                 count++;
  41.             }
  42.             if (count >= k) {
  43.                 return c[26][v] * f[v];
  44.             } else {
  45.                 return 0;
  46.             }
  47.         }
  48.         long ret = 0;
  49.         for (int t = 0; t <= v; ++t) {
  50.             a[u] = t;
  51.             ret += rec(u + 1, Math.max(v, t + 1), m, k);
  52.         }
  53.         return ret;
  54.     }
  55.    
  56.  
  57. }
  58. //Powered by KawigiEdit 2.1.4 (beta) modified by pivanof!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement