Advertisement
LevMukoseev

Untitled

Mar 12th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace _1590
  5. {
  6. class Program
  7. {
  8. static void Main()
  9. {
  10. var input = Console.ReadLine();
  11. var constant = 37;
  12.  
  13. //считаем степени
  14. var degree = new long[input.Length];
  15. degree[0] = 1;
  16. for (var i = 1; i < input.Length; i++)
  17. degree[i] = degree[i - 1] * constant;
  18.  
  19. //считаем полином
  20. var baseHash = new long[input.Length];
  21. baseHash[0] = input[0];
  22. for (var i = 1; i < input.Length; i++)
  23. baseHash[i] = baseHash[i-1] + input[i]* degree[i];
  24.  
  25. var result = 0;
  26. for (var length = 1; length <= input.Length; length++)
  27. {
  28. var hashes = new HashSet<long>();
  29. for (var index = 0; index <= input.Length - length; index++)
  30. {
  31. long hash = baseHash[index + length - 1];
  32. if(index > 0)
  33. hash -= baseHash[index - 1];
  34. hash *= degree[input.Length - index - 1];
  35. hashes.Add(hash);
  36. }
  37. result += hashes.Count;
  38. }
  39.  
  40. Console.WriteLine(result);
  41. }
  42. }
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement