51nod 1732 51nod婚姻介绍所

51nod除了在做OJ之外,还开展了很多副业。婚姻介绍所就是其中之一。

对于一个客户,我们可以使用一个字符串来描述该客户的特质。

假设现在我们有两个客户A和B。

A的特质字符串为:abcdefg

B的特质字符串为:abcxyz

则A和B的匹配度f(A, B)为A和B的最长公共前缀的长度,即len(‘abc‘) = 3

由于最近51nod经费紧张,所以夹克大老爷设计了一种压缩算法以节约内存。

所有用户的特质字符串都被存储在了一个长为n的字符串S中。(n <= 1000)用户的特质使用一个整数p表示,表示该用户的特质字符串为S[p...n - 1]。

现给定字符串S,与q次查询<ai, bi>(ai, bi分别为合法的用户特质整数)。请输出q次查询分别对应的&#8;客户匹配度。

Input

现给定字符串长度n,与字符串S。接下来是整数q,代表接下来有q次查询。
下面q行有两个整数ai, bi。代表查询特质为ai与bi的用户的匹配度。

1 <= n <= 1000
1 <= q <= 10^6

输入数据全部合法。

Output

每一行输出一个用户匹配度整数。

Input示例

12
loveornolove
5
3 7
0 0
9 1
3 1
9 5

Output示例

0
12
3
0
0

Wizmann (题目提供者)

思路:直接把字符串倒转过来,然后dp[i][j]表示第i个和第j个的最长公共后缀,最后查询直接输出dp[n-u][n-v]就好了,O(n^2)预处理,O(1)查询。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const int inf =0x3f3f3f3f;
const double  pi = acos(-1.0);
const int N = 1e3 + 10;
int dp[N][N];
char s[N],x[N];
int main()
{
    int n, m;
    scanf("%d", &n);
    scanf("%s", s);
    for(int i = 0; i<n; i++)
    {
        x[n-i-1] = s[i];
    }
    x[n] = '\0';
    memset(dp, 0, sizeof(dp));
    for(int i = 1; i<=n; i++)
        for(int j = 1; j<=n; j++)
        {
            if(x[i-1] == x[j-1])
            {
                dp[i][j] = dp[i-1][j-1] + 1;
            }
            else dp[i][j] =0;
        }
        int u, v;
        scanf("%d", &m);
        while(m--)
        {
            scanf("%d%d", &u, &v);
            printf("%d\n", dp[n-u][n-v]);
        }
        return 0;
}
时间: 2024-11-05 18:50:47

51nod 1732 51nod婚姻介绍所的相关文章

51nod 1732 婚姻介绍所 (暴力 / DP)

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1732 题目: 51nod除了在做OJ之外,还开展了很多副业.婚姻介绍所就是其中之一. 对于一个客户,我们可以使用一个字符串来描述该客户的特质. 假设现在我们有两个客户A和B. A的特质字符串为:abcdefg B的特质字符串为:abcxyz 则A和B的匹配度f(A, B)为A和B的最长公共前缀的长度,即len('abc') = 3 由于最近51nod经费紧张,

合肥婚姻介绍所

51金缘婚姻市场是一家专业婚介机构,这里有众多不同条件的男女供你选择,本所具有一定专业水准的工作人员,我们的目的是为广大征婚者牵线搭桥,组合一个美满幸福的家庭. 本机构坚持 “以法办事.诚信服务.信誉第一”的工作宗旨,面向基层.面向大众,为近六万余名未婚青年.再婚男女朋友结交友谊.择偶觅侣提供了牵线搭桥.穿针引线的服务,使数千人享受了爱情和友谊的甜蜜,使许多大龄未婚青年找到了终身伴侣,许多失偶者找回了人生的希望,许多离异者找到了家庭的欢乐. 我们以诚信的服务,奉献的精神赢得了广大会员朋友的赞许和

51nod 1185 || 51nod 1072 威佐夫博弈

贴个模板:平常的跟高精度java的: int: #pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cmath> #include<string> #include<queue> #include<algorithm> #include<stack> #i

51nod-1732 婚姻介绍所(后缀数组)

题目大意:回答任意两个子串的最长公共前缀. 题目分析:后缀数组的模板题.但是输入输出都要外挂. 代码如下: # include<iostream> # include<cstdio> # include<cstring> # include<algorithm> using namespace std; const int N=1000; int n,m; char s[N+5]; int cnt[N+5],SA[N+5]; int rk[N+5],tSA[

HDU -1506 Largest Rectangle in a Histogram&amp;&amp;51nod 1158 全是1的最大子矩阵 (单调栈)

单调栈和队列讲解:传送门 HDU -1506题意: 就是给你一些矩形的高度,让你统计由这些矩形构成的那个矩形面积最大 如上图所示,如果题目给出的全部是递增的,那么就可以用贪心来解决 从左向右依次让每一个矩形的高度当作最后的高度,来从中选取最大值就可以了 但是如果它不是递增的,中间会出现低谷,那么要还想运用贪心策略就要把之前高度大于它的全部扔掉,但是再扔掉他们之前还要判断一下以他们为最后答案的高度可不可行,这样我们就是在构造一个递增序列,可以用栈来维护它 代码: 1 #include<stdio.

对Spring IOC的理解

1.IoC和DI DI-Dependency Injection,即"依赖注入":组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中.依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活.可扩展的平台.通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现. 理解DI的关键是:"谁依赖谁,为什么需要依赖,谁注入谁,

Spring IOC理解

内容来自http://blog.csdn.net/qq_22654611/article/details/52606960 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/blog/1413846 1.1.IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技

谈谈对Spring IOC的理解(转)

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinniansh

Spring的Ioc

引用:http://www.cnblogs.com/xdp-gacl/p/4249939.html 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框