zoukankan      html  css  js  c++  java
  • CSU 1328: 近似回文词

    省赛的A题。。。现场都没什么人做。。。
    其实就一暴力水题。。。。。。坑死了。。。

    1328: 近似回文词

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 13  Solved: 8
    [Submit][Status][Web Board]

    Description

    输入一行文本,输出最长近似回文词连续子串。所谓近似回文词是指满足以下条件的字符串:

    1. S以字母开头,字母结尾

    2. a(S)b(S)最多有2k个位置不同,其中a(S)S删除所有非字母字符并且把所有字母转化成小写之后得到的串,b(S)a(S)的逆序串。

    比如当k=1时,Race cat是一个近似回文词,因为a(S)=racecatb(S)=tacecar只有2个位置不同。

    Input

    输入包含不超过25组数据,每组数据包含两行。第一行是整数k0<=k<=200),第二行为字符串S,包含至少一个字母但不超过1000个字符(换行符不算)。S只包含字符、空格和其他可打印字符(比如逗号,句号),并且不会以空白字符开头。

    Output

    对于每组测试数据,输出最长近似回文子串的长度和起始位置(S的第一个字符是位置1)。如果有多个最长近似回文子串解,起始位置应尽量小。

    Sample Input

    1
    Wow, it is a Race cat!
    0
    abcdefg
    0
    Kitty: Madam, I'm adam.

    Sample Output

    Case 1: 8 3Case 2: 1 1Case 3: 15 8

    HINT

     

    Source

    湖南省第九届大学生计算机程序设计竞赛 

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 
     5 using namespace std;
     6 
     7 char str[2000],hw[2000];
     8 int chang[2000];
     9 int k;
    10 
    11 int main()
    12 {
    13     int cas=1;
    14     while(scanf("%d",&k)!=EOF)
    15     {
    16         getchar();
    17         gets(str);
    18         int len=strlen(str);
    19         int cnt=0;
    20         for(int i=0;i<len;i++)
    21         {
    22             if((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z'))
    23             {
    24                 char c=str[i];
    25                 if(c>='A'&&c<='Z') c=c-'A'+'a';
    26                 chang[cnt]=i;
    27                 hw[cnt++]=c;
    28             }
    29         }
    30         hw[cnt]='';
    31         int maxlen=1,pos=1;
    32         for(int j=cnt;j>=1;j--)
    33         {
    34             for(int i=0;i+j-1<cnt;i++)
    35             {
    36                 int st=i+j-1,cnt=0;
    37                 int len=chang[st]-chang[i]+1;
    38                 if(len<maxlen) continue;
    39                 for(int l1=i,l2=st;l1<l2;l1++,l2--)
    40                 {
    41                     if(hw[l1]!=hw[l2]) cnt+=2;
    42                     if(cnt>2*k) break;
    43                 }
    44                 if(cnt<=2*k)
    45                 {
    46                     if(maxlen<len||(maxlen==len&&i<pos))
    47                     {
    48                         maxlen=len;
    49                         pos=i;
    50                     }
    51                 }
    52             }
    53         }
    54         printf("Case %d: %d %d
    ",cas++,maxlen,chang[pos]+1);
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    如何 Scale Up/Down Deployment?- 每天5分钟玩转 Docker 容器技术(126)
    读懂 Deployment YAML
    k8s 创建资源的两种方式
    在qemu模拟的aarch32上使用kgtp
    交叉编译gdb和gdbserver
    基于设备树的controller学习(2)
    基于设备树的controller学习(1)
    基于设备树的TQ2440 DMA学习(4)—— client驱动
    基于设备树的TQ2440 DMA学习(3)—— DMA控制器驱动
    基于设备树的TQ2440 DMA学习(2)—— 简单的DMA传输
  • 原文地址:https://www.cnblogs.com/CKboss/p/3369354.html
Copyright © 2011-2022 走看看