| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1257 人关注过本帖, 1 人收藏
标题:一道浙江工业大学的ACM题 感兴趣的请进
只看楼主 加入收藏
parkour
Rank: 2
等 级:论坛游民
帖 子:63
专家分:39
注 册:2009-1-3
结帖率:87.5%
收藏(1)
已结贴  问题点数:10 回复次数:7 
一道浙江工业大学的ACM题 感兴趣的请进
Description:
Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?

Input:
测试数据有若干行字符串,包括字母,数字,符号。(字母区分大小写)
 
Output:
与输入相对应每一行输出一个整数,代表最长有效密码串的长度。

Sample Input:
ABBA
12ABBA
A
ABAKK
51233214
abaaab
Sample Output:
4
4
1
3
6
5
 
搜索更多相关主题的帖子: ACM 浙江 大学 兴趣 工业 
2009-09-18 23:53
专抓你的错
Rank: 2
等 级:论坛游民
帖 子:113
专家分:22
注 册:2009-5-12
收藏
得分:2 
又是后缀数组的题,直接套模板就是了

C/C++算法群19472277



第19次算法竞赛http://
2009-09-19 00:16
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
没有模板

我就是真命天子,顺我者生,逆我者死!
2009-09-19 00:23
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:3 
我感兴趣
程序代码:
#include<stdio.h>
int datas(char a[],int j,int k)
{
 int i,n,m=0;
 n=((j+2)==k)?1:0;
 while(j>=0&&k<strlen(a))
   {
    if(a[j--]==a[k++])
      m+=2;
    else
      break;
   }
 return m+n;
}


void main()
{
   int i,k,m=0,n=0;
   char a[200];
   gets(a);
   if(strlen(a)>1)
    {
     for(i=0;i<strlen(a)-1;i++)
       {
    if(a[i]==a[i+1])
      n=datas(a,i,i+1);
    if(m<n)m=n;
       }
     for(i=0;i<strlen(a)-2;i++)
       {
    if(a[i]==a[i+2])
      n=datas(a,i,i+2);
    if(m<n)m=n;
       }
     }
   else if(strlen(a)==1)m=1;
  printf("%d\n\n",m);
  getch();
}



[ 本帖最后由 UserYuH 于 2009-9-19 01:40 编辑 ]

努力—前进—变老—退休—入土
2009-09-19 01:29
专抓你的错
Rank: 2
等 级:论坛游民
帖 子:113
专家分:22
注 册:2009-5-12
收藏
得分:0 
就算是DP也用不着三次方的复杂度

C/C++算法群19472277



第19次算法竞赛http://
2009-09-19 11:28
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:3 
很长时间没写了,都荒废了。感觉现在自己在退步。写个代码练习一下吧,不要求 AC ,只是纯属练习一下:
程序代码:
#include<stdio.h>
#include<string.h>
#define N  100
int check(char *,char *);
int main(void)
{
    char ch[N];
    int num,tmp;
    int i,j,len;
    fgets(ch,N,stdin);
    num=1;
    len=strlen(ch)-1;
    for(i=0;i<len;++i)
    {
        for(j=len;j>i;--j)
        {
            if(ch[i]==ch[j])
            {
                tmp=check(&ch[i],&ch[j]);
                if(tmp>num)
                {
                    num=tmp;
                }
            }
        }
    }
    printf("%d\n",num);
}
int check(char *p,char *q)
{
    int n=q-p+1;
   
    while(p<q)
    {
        if(*p!=*q)
        {
            return 1;
        }
        p++;
        q--;
    }
   
    return n;
}

2009-09-19 17:30
changyilin
Rank: 2
等 级:论坛游民
帖 子:18
专家分:20
注 册:2009-9-4
收藏
得分:1 
六楼的文件输入fgets行吗???
2009-09-19 21:19
rofor
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:68
专家分:165
注 册:2009-6-12
收藏
得分:1 
扩展KMP 或 后缀数组/树

I'm rofor.
for(;;;);  :-)
RoFoR [AT] YaHoO [DoT] CN
2009-09-19 21:38
快速回复:一道浙江工业大学的ACM题 感兴趣的请进
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016276 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved