USACO Section 1.3.3 Calf Flac

3 篇文章 0 订阅

字符串处理的比较麻烦的题目,最难的地方就是要输出原文.

这道题目首先要预处理一下,把不是字母的全部去掉,再变成大写字母(为了便于比较),存到一个string的变量里面,原文保存到时候要注意用

一行一行的读,而这个函数是不包括换行符'\n'的,所以自己别忘了手动加上

为了提高效率,我们的回文函数用的是从中间往两边扩散的方法进行处理的,回文有两种形式,一种是奇回文,另一种是偶回文

都要进行判断

回文函数找到的是处理过后的字符串中 的开始回文的位置及长度,那么如何才能输出原文呢?

我们对字符串处理的时候只是把字母放进去了,所以在输出的时候要从第s个字母以后的内容中输出,一直输出输出的 内容中包括len个字母

那么我们的就完成了原文的输出


/*
ID: zhuihun1
PROG: calfflac
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string.h>
#include <stdio.h>
#include<algorithm>
#define MAXSIZE 5005
using namespace std;
string yuanwen,str;
int s=0,len=0;
ofstream fout ("calfflac.out");
ifstream fin ("calfflac.in");
void huiwen()
{
    int i,j,n,x;
    n=(int)str.length();
    for(i=1;i<n;i++)
    {
        //判断偶回文
        x=0;
        j=1;
        while(str[i+j]==str[i-j+1]&&i-j+1>-1&&i+j<n)
        {
            x+=2;j++;
        }
        if(x>len)
        {
            len=x;
            s=i-x/2+1;
        }
        //判断奇回文
        x=1;
        j=1;
        while(str[i+j]==str[i-j]&&i-j>-1&&i+j<n)
        {
            x+=2;j++;
        }
        if(x>len)
        {
            len=x;
            s=i-x/2;
        }
    }
}
void display()
{
    int i,n,x=0,j=0;
    char c;
    n=(int)yuanwen.length();
    for(i=0;i<n;i++)
    {
        c=yuanwen[i];
        if((c>='a'&&c<='z')||(c>='A'&& c<='Z'))
            x++;
        if(x>s&&j<len)
        {
            fout<<c;
            if((c>='a'&&c<='z')||(c>='A'&& c<='Z'))
                j++;
        }

    }

}
int main()
{
    string tmp="";
    char c;
    int i;
    while(getline(fin,tmp))
    {
        yuanwen=yuanwen+tmp+'\n';
        for(i=0;i<(int)tmp.length();i++)
        {
            c=tmp[i];
            if(c>='a'&&c<='z')
                str+=c-32;
            else if(c>='A'&& c<='Z')
                str+=c;
        }
    }
    huiwen();
    fout<<len<<endl;
    display();
    fout<<endl;

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[实验目的] 1、学习如何使用XMLSPY集成开发环境完成XML Schema相关的开发工作。 2、掌握XML Schema与DTD之间的区别,能够完成两者之间的转换;掌握在XML Schema中如何定义元素和属性,如何使用限制、列表和合并派生自己的简单数据类型,如何定义复杂数据类型,全局/局部元素和数据类型之间的区别;如何将XML Schema文档关联到XML实例数据文档,并完成文档的有效性验证。 3、掌握如何准确定义数据之间的参照完整性约束,如何在模式中使用多态性支持,如何在文档中定义空值等等。 [实验内容和步骤] 1、使用XMLSPY集成开发环境,新建XML Schema文档,在各种不同的编辑视图中尝试采用不同的方式完成XML Schema文档的编辑和查看;并使用XMLSPY提供的便利,建立XML、Schema两者之间的关联,进行XML文档的良构以及有效性验证。 2、严格按照下图给出的文档模型,在XML Schema编辑环境的Schema视图中完成book.xsd的编写(不要使用Text视图进行编写): 在上图中,没有指定简单类型元素和属性的数据类型,请根据合理的情况,完成数据类型的创建(至少使用到限制方式中的三种以上的限制方面),请在IDE的Details视图->type和Facets中完成上述任务。 在上图中,有三个title元素分别表示book、section和figure的标题,请定义下述类型: titleType:1-100个字符的文本; bookTitleType:titleType类型限制派生的子类型,要求取枚举值“Data On the Web”、“TCP/IP Illustrated”等; sectionTitleType:titleType类型限制派生的子类型,要求必须形如“1.xxxx”、“1-1.xxxx”等等(表示第一节、第一节下面的第一节等等,注意section是递归的形式); figureTitleType:titleType类型限制派生的子类型,要求必须形如“1-1.xxxx” 、“1-1-1.xxxx”(表示第一节中的第一个图、第一节下面的第一节的第一个图等等); 然后编写book.xml,并使用多态性(即所有title的类型均为titleType,而数据实例中指明具体类型),请确保通过文档有效性验证。 3、在上次的DTD实验中,我们编写了SpyBase1.xml、SpyBase2.xml、以及SpyBase1.dtd和SpyBase2.dtd,这次需要完成SpyBase1.xsd和SpyBase2.xsd,建立模式与数据之间的关联,并进行文档有效性验证。在编写的XSD文档SpyBase1.xsd中,要求使用key/keyref描述数据的实体完整性以及数据之间的参照完整性(SpyBase2.xml不需要,因为已经使用嵌套消除了参照关系)。 [实验思考] 与ID/IDREF相比,key/keyref有哪些优点,在使用上有何不同? 假设SpyBase1.xml中的alias、mission、spy来自不同的命名空间中,如何在Schema中对其进行限定,请在XMLSPY中完成相应的xsd文档?修改SpyBase1.xml,并验证新的SpyBase1_2.xsd是否正确? [提交时间及内容] 最后提交时间 2013年?月?日 提交内容 提交book.xsd、book.xml(使用多态)。 提交SpyBase1. xsd、SpyBase2. xsd。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值