Блог пользователя Lakh

Автор Lakh, история, 7 лет назад, По-английски

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.

Link to problem: http://mirror.codeforces.com/gym/101502/problem/G

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 лет назад, # |
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 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Do you need to answer the queries online?

»
7 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Hmmm, my program passes within 217ms :D Solution

  • »
    »
    7 лет назад, # ^ |
    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.

»
6 лет назад, # |
Rev. 3   Проголосовать: нравится +1 Проголосовать: не нравится

I used hashing and unordered_map.It passed within 577 ms. My code

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

This is my code without hashings and maps, just easy trie )