poj 2334 Simple prefix compression(模拟/字符串处理)

程序设计实习递归作业 poj 2334 Simple prefix compression(模拟/字符串处理)
总时间限制: 2000ms 内存限制: 65536kB

描述
Many databases store the data in the character fields (and especially indices) using prefix compression. This technique compresses a sequence of strings A1, …, AN by the following method: if there are strings Ai = ai,1ai,2…ai,p and Ai + 1 = ai+1,1ai+1,2…ai+1,q
such that for some j ≤ min(p, q) ai,1 = ai+1,1, ai,2 = ai+1,2, … ai,j = ai+1,j, then the second string is stored as [j]ai+1,j+1ai+1,j+2… ai+1,q, where [j] is a single character with code j.

If j = 0, that is, strings do not have any common prefix, then the second string is prefixed with zero byte, and so the total length actually increases.

Constraints
1 ≤ N ≤ 10000, 1 ≤ length(Ai) ≤ 255.

输入
First line of input contains integer number N, with following N lines containing strings A1 … AN

输出
Output must contain a single integer – minimal total length of compressed strings.

样例输入

3
abc
atest
atext

样例输出

11

来源
Northeastern Europe 2003, Far-Eastern Subregion


本题与递归似乎没有直接关系,是一个纯粹的字符串处理题目,关键是审题,要注意即使没有可压缩的也要加上首字0(仔细想想这是符合逻辑的,不然我怎么知道你压缩没压缩),还有注意这种存储方法,即使压缩了15字,我不必存下15,只需要存一个char c=15即可,(仔细想想这是符合逻辑的,不然无法判断哪几位用于记录压缩位数),审题审清楚后可以解决问题。


#define MAX_LEN 255

#include<stdio.h>
#include<string.h>

char last[MAX_LEN+1]="",now[MAX_LEN+1]="";
int n,ans=0,l1=0,l2=0,len=0;

int main()
{
    scanf("%d",&n); 
    while (n--)
    {
        strcpy(last,now);
        l1=l2;
        scanf("%s\n",&now);
        l2=strlen(now);
        len=0;
        for (int i=0;i<l1 && i<l2;i++)
        {
            if (now[i]!=last[i])
                break;
            len++;
        }
        ans+=l2-len+1;
    }
    printf("%d\n",ans-1);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值