Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace _1590
- {
- class Program
- {
- static void Main()
- {
- var input = Console.ReadLine();
- var constant = 37;
- //считаем степени
- var degree = new long[input.Length];
- degree[0] = 1;
- for (var i = 1; i < input.Length; i++)
- degree[i] = degree[i - 1] * constant;
- //считаем полином
- var baseHash = new long[input.Length];
- baseHash[0] = input[0];
- for (var i = 1; i < input.Length; i++)
- baseHash[i] = baseHash[i-1] + input[i]* degree[i];
- var result = 0;
- for (var length = 1; length <= input.Length; length++)
- {
- var hashes = new HashSet<long>();
- for (var index = 0; index <= input.Length - length; index++)
- {
- long hash = baseHash[index + length - 1];
- if(index > 0)
- hash -= baseHash[index - 1];
- hash *= degree[input.Length - index - 1];
- hashes.Add(hash);
- }
- result += hashes.Count;
- }
- Console.WriteLine(result);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement