Please subscribe to the official Codeforces channel in Telegram via the link: https://t.me/codeforces_official. ×

### Lakh's blog

By Lakh, history, 7 months ago, ,

I am solving the following problem:

Given T (T<=75) testcases . Each testcase consists of N (N<=10^4) strings and Q (Q<=10^4) queries. In each query you are given a number X.The task is to find the most common suffix of length X among the given strings and you need to print how common it is. Sum of length of all strings in a testcase is<=10^5.

E.g. Input :

1
5 4

abccba
abddba
xa
abdcba
aneverknow

1
2
4
3


Output:

4
3
1
2


I am inserting the given strings in a trie and storing a variable count in each node to find number of strings along the given path with suffix of length K. Now for all possible length of suffixes I am updating the ans[] array which stores the result for a given suffix of length K. and hence answering queries in O(1) but I am geting TLE. I am not able to optimize it further . How to solve this problem?? My code: https://ideone.com/fNAWjb

•
• +3
•

 » 7 months ago, # |   0 Auto comment: topic has been updated by Lakh (previous revision, new revision, compare).
 » 7 months ago, # |   0 Auto comment: topic has been updated by Lakh (previous revision, new revision, compare).
 » 7 months ago, # | ← Rev. 2 →   +8 I approached it the same way and yeah, time limit is pretty tight. Try this: #pragma GCC optimize("O3") #pragma GCC optimize("expensive-optimizations") Then I did some small optimizations and it passed after 779 ms.Edit: It also passes without the above pragmas. You may implement the trie using simple array and don't re-initialize everything in each test case. Instead, keep track of the current test case and ignore trie entries from older test cases.Submission: https://lpaste.net/2405931179027988480.
•  » » 7 months ago, # ^ |   0 neutron-byte Have you implemented static trie or the dynamic one??
•  » » 7 months ago, # ^ |   0 neutron-byte I have implemented the above problem using array here https://ideone.com/9DAlEB Can you please check it as my complexity is O(N*STRING_LENGTH) for inserting string and computing the ans[] array for each test case and have used fast i/o but still TLE. Not able to understand reason behind this??
 » 7 months ago, # |   0 Do you need to answer the queries online?
•  » » 7 months ago, # ^ | ← Rev. 3 →   0 ___tutis___ No. Please suggest some approach for this problem.
•  » » » 7 months ago, # ^ |   0 Hashing the prefixed might work :)
•  » » » » 7 months ago, # ^ |   0 You can increase the length of the strings paralelly and maintain the occurency count of each hash in some data structure.
 » 7 months ago, # |   0 Hmmm, my program passes within 217ms :D Solution
•  » » 7 months ago, # ^ | ← Rev. 2 →   0 Thanks for the reply. Mine passes within 436 ms. I missed the ios_sync statement . Can you please suggest some implementation or idea regarding the hashing of strings that is not affected by anti-hash test?? I read the blog on the same but was not able to find a convincing implementation.
•  » » » 7 months ago, # ^ |   0 Use multiple big enough random prime moduli.
 » 6 months ago, # | ← Rev. 3 →   +1 I used hashing and unordered_map.It passed within 577 ms. My code
 » 6 months ago, # |   0 This is my code without hashings and maps, just easy trie )