PKU 2774 Long Long Message

12 篇文章 0 订阅
6 篇文章 0 订阅
Long Long Message
Time Limit: 4000MS  Memory Limit: 131072K
Total Submissions: 12008  Accepted: 4843
Case Time Limit: 1000MS

Description

The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days: his mother is getting ill. Being worried about spending so much on railway tickets (Byterland is such a big country, and he has to spend 16 shours on train to his hometown), he decided only to send SMS with his mother.

The little cat lives in an unrich family, so he frequently comes to the mobile service center, to check how much money he has spent on SMS. Yesterday, the computer of service center was broken, and printed two very long messages. The brilliant little cat soon found out:

1. All characters in messages are lowercase Latin letters, without punctuations and spaces.
2. All SMS has been appended to each other – (i+1)-th SMS comes directly after the i-th one – that is why those two messages are quite long.
3. His own SMS has been appended together, but possibly a great many redundancy characters appear leftwards and rightwards due to the broken computer.
E.g: if his SMS is “motheriloveyou”, either long message printed by that machine, would possibly be one of “hahamotheriloveyou”, “motheriloveyoureally”, “motheriloveyouornot”, “bbbmotheriloveyouaaa”, etc.
4. For these broken issues, the little cat has printed his original text twice (so there appears two very long messages). Even though the original text remains the same in two printed messages, the redundancy characters on both sides would be possibly different.

You are given those two very long messages, and you have to output the length of the longest possible original text written by the little cat.

Background:
The SMS in Byterland mobile service are charging in dollars-per-byte. That is why the little cat is worrying about how long could the longest original text be.

Why ask you to write a program? There are four resions:
1. The little cat is so busy these days with physics lessons;
2. The little cat wants to keep what he said to his mother seceret;
3. POJ is such a great Online Judge;
4. The little cat wants to earn some money from POJ, and try to persuade his mother to see the doctor :(

Input

Two strings with lowercase letters on two of the input lines individually. Number of characters in each one will never exceed 100000.

Output

A single line with a single integer number – what is the maximum length of the original text written by the little cat.

Sample Input

yeshowmuchiloveyoumydearmotherreallyicannotbelieveit
yeaphowmuchiloveyoumydearmother

Sample Output

27
 
同埋HDU果题一样,呢度就吾9up啦= =
 
代码如下!
 
 
8584823GZHU10061001062774Accepted5340K1125MSC++2514B2011-05-03 14:18:11
 

#include<iostream> #include<stdio.h> #include<string.h> #include<math.h> using namespace std; #define MAXI 200011 int l, key1[MAXI], key2[MAXI], rank[MAXI], tsa[MAXI], sa[MAXI], h[MAXI], heigth[MAXI], hash[MAXI]; char buf[MAXI], tbuf[MAXI]; int *s1 = sa, *s2 = tsa; void Print(int *s, int *r, int l) { int i; for (i = 0; i < l; i++) cout << s[i] << " "; cout << endl; for (i = 0; i < l; i++) cout << r[i] << " "; cout << endl; } void CS(int *key) { int i, *t; memset(hash, 0, sizeof hash); for (i = 0; i < l; i++) hash[key[s1[i]]]++; for (i = 1; i < MAXI; i++) hash[i] += hash[i-1]; for (i = l - 1; i >= 0; i--) s2[--hash[key[s1[i]]]] = s1[i]; //memcpy(s1, s2, sizeof s2); t = s1; s1 = s2; s2 = t; } void CSA(char *str) { int i, j; for (i = 0; i < l; i++) s1[i] = i, key1[i] = str[i]; CS(key1); for (rank[s1[0]] = 0, i = 1; i < l; i++) if (key1[s1[i]] == key1[s1[i - 1]]) rank[s1[i]] = rank[s1[i-1]]; else rank[s1[i]] = rank[s1[i - 1]] + 1; for (j = 1; j < l; j *= 2) { for (i = 0; i < l; i++) { key1[i] = rank[i]; if (i + j < l ) key2[i] = rank[i + j]; else key2[i] = 0; } CS(key2); CS(key1); for (rank[s1[0]] = 0, i = 1; i < l; i++) if (key1[s1[i]] == key1[s1[i - 1]] && key2[s1[i]] == key2[s1[i - 1]]) rank[s1[i]] = rank[s1[i-1]]; else rank[s1[i]] = rank[s1[i - 1]] + 1; } //Print(sa, rank, l); if (s1 != sa) memcpy(sa, tsa, sizeof tsa); } void CHA(char *str) { int i, j, k = 0; for (i = 0; i < l; heigth[rank[i++]] = k) for (k? k-- : 0, j = sa[rank[i] - 1]; str[i + k] == str[j + k]; k++); } void CHA1(char *str) { int i, j, k, add; for (i = 0; i < l; i++) { if (rank[i] == 0) { h[i] = 0; continue; } j = rank[i]; k = rank[i] - 1; if (i == 0 || h[i - 1] <= 1) add = 0; else add = h[i - 1] - 1; while (str[sa[j] + add] == str[sa[k] + add]) add++; h[i] = add; } for (i = 0; i < l; i++) heigth[rank[i]] = h[i]; //Print(heigth, h, l); //char *p = str; //for (i = 0; i < l; i++) cout << sa[i] << " : " << p + sa[i] << endl; } int main() { int l1, l2, T, i, j, k, p, maxi; double sum, ave; //scanf("%d", &T); //while (T--) while (scanf("%s", tbuf) != EOF) { l1 = strlen(tbuf); for (l = i = 0; i < l1; i++) buf[l++] = tbuf[i]; buf[l++] = '#'; scanf("%s", tbuf); l2 = strlen(tbuf); for (i = 0; i < l2; i++) buf[l++] = tbuf[i]; buf[l++] = 0; CSA(buf); CHA(buf); for (maxi = 0, i = 1; i < l; i++) if ((sa[i] < l1 && sa[i - 1] > l1) || (sa[i - 1] < l1 && sa[i] > l1)) if (heigth[i] > maxi) maxi = heigth[i]; printf("%d\n", maxi); /*for (sum = p = k = 0, i = 1; i < l; i++) if (heigth[i] < 3) k = i; else for (j = k; j < i; j++) p++, sum += abs(sa[i] - sa[j]); ave = sum / p; for (sum = k = 0, i = 1; i < l; i++) if (heigth[i] < 3) k = i; else for (j = k; j < i; j++) sum += pow(ave - fabs(sa[i] - sa[j]), 2);*/ //printf("%.6lf\n", sum / p); } return 0; }

 

后缀数组好pretty………………


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PKU VehicleID数据集是由北京大学智能交通与多媒体实验室提供的一个用于车辆识别的图像数据库。该数据集包含了车辆在不同环境、不同拍摄条件下的图像,旨在用于车辆相关研究的数据训练和测试。 PKU VehicleID数据集收集了超过8万辆车的图像,涵盖了2000多个车型和16000多个车例。这些图像是在不同的拍摄条件下捕捉到的,包括不同的光照、天气、角度和距离。这使得该数据集在车辆识别和相关研究领域具有较高的多样性和可用性。 PKU VehicleID数据集不仅提供了车辆图像,还包含了车辆的标注信息,如车辆类型、颜色、品牌等。这些标注信息为研究者提供了更多的可用数据,可以辅助他们进行车辆特征识别、车辆分类等相关研究。 PKU VehicleID数据集可以广泛应用于车辆识别、车辆检测、交通监控等领域的研究和实践中。通过利用该数据集,研究者可以进行车辆模型的建立与识别、车辆行为的分析与预测等工作,从而为智能交通和城市管理提供更好的技术支持和解决方案。 综上所述,PKU VehicleID数据集是一个丰富的车辆图像数据库,它提供了大量的车辆图像和标注信息,为车辆识别和相关研究领域的研究者提供了重要的资源和工具。通过该数据集的应用,我们可以更好地理解和研究车辆特征识别、车辆分类等问题,为智能交通和城市管理带来更多的创新和进步。 ### 回答2: PKU VehicleID数据集是由北京大学人工智能与自动化研究所于2016年发布的一个车辆检测和识别的数据集。这个数据集主要包含了来自北京市道路监控系统的车辆图像和相关的车辆属性信息。 PKU VehicleID数据集的特点主要有以下几点。首先,该数据集包含了非常大量的车辆图像,总计约50万张,涵盖了丰富的场景和车型样本。其次,这些图像都是以野外真实道路监控视频截取得到的,具有较高的真实性和复杂性。此外,数据集中的每一辆车都被分配了一个唯一的ID号码,用于标识和跟踪车辆。最后,PKU VehicleID数据集还提供了诸如车辆类型、颜色、品牌等属性信息,方便进行车辆属性识别和分类任务。 PKU VehicleID数据集在车辆检测、跟踪和识别领域有着广泛的应用价值。通过利用这个数据集,可以开展车辆检测算法的研究和性能评估。同时,也可以进行车辆属性识别、车型分类等应用任务的研究。这个数据集的发布对于提升车辆智能监控和交通管理系统的性能具有重要意义。此外,PKU VehicleID数据集还可以为自动驾驶、交通安全和交通流量分析等领域的研究提供有价值的实验数据基础。总之,PKU VehicleID数据集是一个丰富而有用的资源,为车辆相关研究提供了有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值