Advertisement
Guest User

400

a guest
Apr 23rd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.52 KB | None | 0 0
  1. import java.util.HashMap;
  2.  
  3. public class IpAddresses {
  4.     public static HashMap<State, Integer> memo;
  5.     public static int MOD;
  6.    
  7.     public static int solve(String S, int K){
  8.         State key = new State(S, K);
  9.         Integer m = memo.get(key);
  10.         if(m != null){
  11.             //System.out.println("MEMO");
  12.             return m;
  13.         }
  14.        
  15.         int len = S.length();
  16.         if(K == 0){
  17.             if(len == 0){
  18.                 memo.put(key, 1);
  19.                 return 1;
  20.             }
  21.             else{
  22.                 memo.put(key, 0);
  23.                 return 0;
  24.             }
  25.         }      
  26.        
  27.         int sum = 0;
  28.        
  29.         //ednocifren
  30.         if(len > 0){
  31.             sum += solve(S.substring(1), K - 1);
  32.             sum %= MOD;
  33.         }
  34.        
  35.         //dvocifren
  36.         if(len > 1 && S.charAt(0) != '0'){
  37.             sum += solve(S.substring(2), K - 1);
  38.             sum %= MOD;
  39.         }
  40.        
  41.         //trocifren
  42.         if(len > 2 && S.charAt(0) != '0' && Integer.parseInt(S.substring(0, 3)) < 256){
  43.             sum += solve(S.substring(3), K - 1);
  44.             sum %= MOD;
  45.         }
  46.        
  47.         memo.put(key, sum);
  48.         return sum;
  49.     }
  50.    
  51.     public static int count(String S, int K) {     
  52.         MOD = 1000000007;
  53.         memo = new HashMap<>();
  54.         return solve(S, K);
  55.     }
  56.    
  57. //  public static void main(String[] args) {
  58. //      System.out.println(count("1234567", 3));
  59. //  }
  60. }
  61.  
  62. class State{
  63.     String S;
  64.     int K;
  65.     State(String ss, int KK){
  66.         S = ss;
  67.         K = KK;
  68.     }
  69.     @Override
  70.     public int hashCode() {
  71.         final int prime = 31;
  72.         int result = 1;
  73.         result = prime * result + K;
  74.         result = prime * result + ((S == null) ? 0 : S.hashCode());
  75.         return result;
  76.     }
  77.     @Override
  78.     public boolean equals(Object obj) {
  79.         State s = (State) obj;
  80.         return K == s.K && S.equals(s.S);
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement