传送门

1293 - Document Analyzer
Time Limit: 3 second(s) Memory Limit: 32 MB

You work in a leading software development company. As you are great in coding, most of the critical tasks are allotted for you. You like the challenge and you feel excited to solve those problems.

Recently your company is developing a project named Document Analyzer. In this project you are assigned a task; of course a critical task. The task is that you are given a document consisting of lowercase letters, numbers and punctuations. You have to analyze the document and separate the words first. Words are consecutive sequences of lower case letters. After listing the words, in the order same as they occurred in the document, you have to number them from 1, 2, ..., n. After that you have to find the range p and q (p ≤ q) such that all kinds of words occur between p and q (inclusive). If there are multiple such solutions you have to find the one where the difference of p and q is smallest. If still there is a tie, then find the solution where p is smallest.

Input

Input starts with an integer T (≤ 15), denoting the number of test cases.

Each case will be denoted by one or more lines denoting a document. Each line contains no more than 100 characters. A document will contain either lowercase letters or numbers or punctuations. The last line of a document will contain the word 'END' which is of course not the part of the document. You can assume that a document will contain between 1 and 50000 words (inclusive). Words may contain up to 10 characters. And a document can contain up to 5000 lines.

Output

For each case, print the case number and p and q as described above.

Sample Input

Output for Sample Input

3

1. a case is a case,

2. case is not a case~

END

a b c d e

END

a@#$a^%a a a

b b----b b++12b

END

Case 1: 6 9

Case 2: 1 5

Case 3: 5 6

Note

Dataset is huge, use faster I/O methods.

我也是醉了,输出少了个空格wa惨了,,,

题解:如标签,用两个指针start、end,往前扫,复杂度O(n)

484217 2015-03-14 08:05:52 1293 - Document Analyzer C++ 1.128 6928
Accepted 
 #include <cstdio>
#include <cstring>
#include <stack>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
#include <string> #define ll long long
int const N = ;
int const M = ;
int const inf = ;
ll const mod = ; using namespace std; int cnt,T;
char s[];
map<string,int>mp;
int a[N];
int len;
int tot;
int vis[N];
int p,q;
int l;
char temp[N]; void ini()
{
p=-;q=;
int i,j;
mp.clear();
len=tot=;
memset(vis,,sizeof(vis));
while(scanf("%s",s)!=EOF && strcmp(s,"END")!=){
l=strlen(s);
// printf(" %s\n",s);
j=;
int ff=;
for(i=;i<l;i++){
if(s[i]>='a' && s[i]<='z'){
ff=;
temp[j]=s[i];
j++;
}
else{
if(ff==){
temp[j]='\0';
len++;
j=;
ff=;
if(!mp[temp]){
tot++;
mp[temp]=tot;
}
a[len]=mp[temp];
}
}
} if(ff==){
temp[j]='\0';
len++;
j=;
ff=;
if(mp[temp]==){
tot++;
mp[temp]=tot;
}
a[len]=mp[temp];
}
}
//printf(" len=%d tot=%d\n",len,tot);
//for(i=1;i<=len;i++){
// printf(" i=%d a=%d\n",i,a[i]);
//}
} void solve()
{
int i,j;
int now=;
i=;
j=;
while(i<=len)
{
//printf(" i=%d j=%d\n",i,j);
for(;j<=len;j++){
vis[ a[j] ]++;
if(vis[ a[j] ]==) now++;
if(now==tot){
//printf(" i=%d j=%d p=%d q=%d\n",i,j,p,q);
for(;i<=j;i++){
if(vis[ a[i] ]==){
//printf(" i=%d j=%d p=%d q=%d\n",i,j,p,q);
if(j-i<q-p){
p=i;q=j;
}
else if(j-i==q-p){
if(i<p){
p=i;q=j;
}
}
vis[ a[i] ]--;
now--;i++;j++;
break;
}
vis[ a[i] ]--;
}
break;
}
}
if(j==len+) break;
}
} void out()
{
printf("Case %d: %d %d\n",cnt,p,q);
} int main()
{
//freopen("data.in","r",stdin);
scanf("%d",&T);
for(cnt=;cnt<=T;cnt++)
//while(scanf("%d%d",&n,&m)!=EOF)
{
ini();
solve();
out();
}
}

lightoj 1293 - Document Analyzer [ 两指针 + 字符串 ]的更多相关文章

  1. ytu 1052: 写一函数,将两个字符串连接(水题,指针练习)

    1052: 写一函数,将两个字符串连接 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 343  Solved: 210[Submit][Status][ ...

  2. java中判断两个字符串是否相等的问题

    我最近刚学java,今天编程的时候就遇到一个棘手的问题,就是关于判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写.在java中,用的是eq ...

  3. c语言中的利用函数实现交换两个字符,交换两个字符串

    c语言交换两个字符: 方法一:利用指针传址,效率比较高 void swap(int *a,int *b) { int temp; temp = *a; *a = *b; *b = temp } 方法二 ...

  4. 【python】实例-python实现两个字符串中最大的公共子串

    由于python中的for循环不像C++这么灵活,因此该用枚举法实现该算法: C="abcdefhe" D="cdefghe" m=0 n=len(C) E=[ ...

  5. shell比较两个字符串是否相等

    比较两个字符串是否相等的办法是: if [ "$test"x = "test"x ]; then这里的关键有几点:1 使用单个等号2 注意到等号两边各有一个空格 ...

  6. js正则表达式的一些研究,截取两个字符串中间的字符串

    一个最常用的场景 截取两个字符串中间的字符串 var str = "iid0000ffr";    var substr = str.match(/id(\S*)ff/);    ...

  7. C#动态规划查找两个字符串最大子串

     //动态规划查找两个字符串最大子串         public static string lcs(string word1, string word2)         {            ...

  8. Python 比较两个字符串大小

    python 2中,有cmp(a,b)函数,用于比较两个字符串的大小. 如 >>>a='abc' >>>b='abd' >>>print cmp( ...

  9. 用Java编程找到两个字符串中共有的字符

    这道题的算法思想是把字符串1中的每个字符与字符串2中的每个字符进行比较,遇到共同拥有的字符,放入另一个数组中,最后顺序输出即可 但是这道题的难点在于怎么排除重复的字符 public class bot ...

随机推荐

  1. CF778A(round 402 div.2 D) String Game

    题意: Little Nastya has a hobby, she likes to remove some letters from word, to obtain another word. B ...

  2. 微信小程序组件解读和分析:一、view(视图容器 )

    view组件说明:    视图容器    跟HTML代码中的DIV一样,可以包裹其他的组件,也可以被包裹在其他的组件内部.用起来比较自由随意,没有固定的结构. view组件的用法: 示例项目的wxml ...

  3. C# 调用第三方DLL缓冲区溢出导致的异常

    这个倒是少见的错误,纪录一下大佬. 先上异常 错误一:尝试读取或写入受保护的内存 错误二:未将对象引用设置到对象的实例 错误三:  托管调试助手“FatalExecutionEngineError”( ...

  4. UVALive 2238 Fixed Partition Memory Management 固定分区内存管理(KM算法,变形)

    题意:目前有一部分可用内存,分为m个大小固定的区域.现有n个程序要执行,每个程序在不同大小的内存中运行所需的时间不同,要使运行完所有程序所耗时最少,问每个程序在哪块区域中从什么时间运行到什么时间,以及 ...

  5. ssh 非root用户互信

    之所以要把这个记录下来 是因为它的确和root用户不一样root用户 不需要改动什么权限问题  只要生成私钥/公钥对 即可 但是一样的操作在普通用户上就出了问题了 折腾了老半天 ssh-keygen ...

  6. liunx+mysql数据库管理

    源码安装 查询是否安装:  rpm -aq |grep mysql 1.下载yum 源            wget 'https://dev.mysql.com/get/mysql57-commu ...

  7. 用户交互和if条件判断、嵌套

    #a=input("提示语“)#接受的数据类型是字符串str#提示用户输入姓名 # a=input("请输入姓名") print(a) '''输出结果:请输入姓名小明 姓 ...

  8. 爬虫学习之第一次获取网页内容及BeautifulSoup处理

    from urllib.request import urlopen from urllib.request import HTTPError from bs4 import BeautifulSou ...

  9. QT+信号有参数与无参数的实现+QT4和QT5在信号和槽使用上的区别

    在QT5中,信号有参数和无参数 #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QWidget> #include <QPushB ...

  10. golang 解析json 动态数组

    #cat file { "Bangalore_City": "35_Temperature", "NewYork_City": " ...