设为首页 加入收藏

TOP

uva 12338 - Anti-Rhyme Pairs(后缀数组+RMQ)
2015-07-20 17:45:56 来源: 作者: 【 】 浏览:3
Tags:uva 12338 Anti-Rhyme Pairs 后缀 RMQ

题目链接:uva 12338 - Anti-Rhyme Pairs

题目大意:给定若干个字符串,每次询问两个字符串的最长公共前缀。

解题思路:本来应该将每个字符串连接起来做后缀数组,但其实可以直接把一个字符串看成是一个字符,然后排序了就对应是SA数组,然后处理height即可。然后根据后缀数组的性质,字符串i和j的最长公共前缀长度即为rank[i]+1~rank[j]之间height的最小值。特判i=j的情况。

#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          using namespace std; typedef pair
         
           pii; const int maxn = 1e5+5; int Rank[maxn]; int dp[maxn][20]; vector
          
            g; vector
           
             height; void rmq_init(const vector
            
             & A) { int n = A.size(); for (int i = 0; i < n; i++) dp[i][0] = A[i]; for (int j = 1; (1<
             
               r) swap(l, r); l++; int k = 0; while ((1<<(k+1)) <= r - l + 1) k++; return min(dp[l][k], dp[r - (1<
              
               > cas; for (int kcas = 1; kcas <= cas; kcas++) { cin >> n; g.clear(); for (int i = 0; i < n; i++) { cin >> s; g.push_back(make_pair(s, i)); } solve(); cout << "Case " << kcas << ":" << endl; cin >> n; while (n--) { cin >> l >> r; cout << rmq_query(Rank[l-1], Rank[r-1]) << endl; } } return 0; }
              
             
            
           
          
         
        
       
      
     
    
   

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj 1182 带权并查集 下一篇uva 1556 - Disk Tree(字典树)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)