BUPT OJ94. 最小距离查询
来源:互联网 发布:啊哈c语言修订版 pdf 编辑:程序博客网 时间:2024/04/30 02:10
题目描述
给定一个由小写字母a到z组成的字符串S,其中第i个字符为S[i](下标从0开始)。你需要完成下面两个操作:
INSERT c
其中c是一个待输入的字符。你需要在字符串的末尾添加这个字符。保证输入的字符同样是a到z之间的一个小写字母。
QUERY x
其中x是一个输入的整数下标。对于这个询问,你需要回答在S当中和S[x]相等且与x最近的距离。输入保证x在当前字符串中合法。
例如S = "abcaba",如果我们操作:
INSERT a
则在S的末端加一个字符a,S变成"abcabaa"。
接下来操作
QUERY 0
由于S[0] = a,在S中出现的离他最近的a在下标为3的位置上,距离为3 - 0 = 3。因此应当输出3。
接下来,如果
QUERY 4
S[4] = b,S中离它最近的b出现在下标为1处,距离为4 - 1 = 3。同样应当输出3。
给定初始字符串S和若干操作,对于每个QUERY,你需要求出相应的距离。
HINT 由于输入数据较大,C/C++中推荐使用scanf进行读入以获得更快的读入速度。同时请注意算法复杂度。
输入格式
输入的第一行是一个正整数
每组输入数据的第一行是一个初始串S。第二行是一个正整数
数据保证在任何情况下,S的长度不会超过100000。
输出格式
对于每个QUERY,输出所求的最小距离。如果S中其它位置都不存在和它相同的字符,输出-1。
输入样例
2axb3INSERT aQUERY 0QUERY 1explore3INSERT rQUERY 7QUERY 1
输出样例
3-12-1
拖了许久的AC代码, 作为一个普通的dp题会有那么低的AC率也是少见. 状态转移方程:
dp[pre[temp]][1]=dp[i][0]=i-pre[temp];
仅此而已
/*USER_ID: test#birdstormPROBLEM: 94SUBMISSION_TIME: 2014-03-27 22:20:04*/#include <stdio.h>#include <stdlib.h>#define For(i,m,n) for(i=m;i<n;i++)#define MIN(x,y) (x)<(y)?(x):(y)#define INF 1000000007#define MAXN 100005 int dp[MAXN][2];char str[MAXN], tmp[10], ch[10]; main(){ int i, j, t, n, len, temp, x; int cnt[27], pre[27]; scanf("%d",&t); For(i,0,MAXN) dp[i][0]=dp[i][1]=INF; while(t--){ For(i,0,27) cnt[i]=0; scanf("%s",str); len=strlen(str); For(i,0,len){ temp=str[i]-'a'; cnt[temp]++; if(cnt[temp]>1) dp[pre[temp]][1]=dp[i][0]=i-pre[temp]; pre[temp]=i; } scanf("%d",&n); while(n--){ scanf("%s",tmp); if(tmp[0]=='I'){ scanf("%s",ch); temp=ch[0]-'a'; cnt[temp]++; if(cnt[temp]>1) dp[pre[temp]][1]=dp[i][0]=i-pre[temp]; pre[temp]=i++; } else { scanf("%d",&x); temp=(MIN(dp[x][0],dp[x][1])); if(temp==INF) puts("-1"); else printf("%d\n",temp); } } For(j,0,i) dp[j][0]=dp[j][1]=INF; } return 0;}
0 0
- BUPT OJ94. 最小距离查询
- BUPT OJ 最小距离查询
- BUPT OJ102 最远距离
- 北邮OJ 最小距离查询
- BOJ 94. 最小距离查询
- 北邮新OJ94
- 最小距离
- bupt
- cigarettes(南阳oj94)
- 最小编辑距离
- 最小编辑距离
- 最小距离问题
- 凸多边形间最小距离
- 四点求距离最小
- 三元组最小距离
- 最小距离之和-中位数
- java最小距离
- 最小距离分类法介绍
- iOS学习之sqlite的创建数据库,表,插入查看数据
- Exercise 31:做出决定
- kindeditor完美整合struts2实现图片上传的功能
- Linux shell 简明教程(二)
- 自动定时备份VPS – 搭建个人网站(五)
- BUPT OJ94. 最小距离查询
- JS获取窗口的宽和高
- [机器学习]机器学习学科初探
- Struts + Spring + Hibernate 视频教程
- jQuery最佳实践
- CES2012 摩托罗拉Golden-i头戴式电脑
- 按位与、或、异或等运算方法
- JS获取苹果引用评分
- 在CDialog和CWnd中动态创建一个窗体的方式