zoukankan      html  css  js  c++  java
  • hnust py road

    问题 C: Py Road

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 125  解决: 34
    [提交][状态][讨论版]

    题目描述

    Life is short,you need Python!

    听说python是一门神奇的语言,所以zzx毅然决然地走上了学习python的道路。

    我们都知道 在C语言中,数组的下标是从0开始,从左到右,python也支持这种方式。

    但是python还有另外一种表示方法,下标可以为负,从右到左,最后一个元素从-1开始,然后前面元素的下标依次减小,如下图所示:

    下标用来访问单个元素,python还支持切片操作,切片是指通过指定下标范围和步长来获得子数组。

    假定数组为S,切片用法如下:

    S[start:end:step]表示取S中从start索引的位置起到end索引的位置,不包含end索引本身,每隔|step|-1个字符(||为绝对值),取一个字符。

    假定数组长度为len。

    若step > 0 表示上述操作从左至右进行

           若start < -len  start = - len

           若end > len end = len

    若step < 0 表示上述操作从右至左进行

           若start >= len start = len - 1

           若end < -len-1 end = -len - 1

    如果S为”python”(字符串也是数组),S[0:4:1]表示的含义就是从下标0开始每取一个字符,下标+1接着取,当下标大于等于4的时候不能再取字符,所以得到的结果就是”pyth”,由于负下标的存在,你会发现[-6:4:1]、[-6:-2:1]、[0:-2:1]得到的结果同样是”pyth”

    更多例子

    [0:4:2] = “pt”       [4:4:1] = “ ”(空)         [-10:2:1]= “py”     [3:10:1]= “hon”

    [4:0:-1] = “ohty ”     [-2:0:1] = “”(空)        [4:0:-2] = “ot”      [-2:0:-1]= “ohty ”

    [-10:10:1]= “python”  [10:-10:-1]= “nohtyp”    

    现在给出字符串和切片,请你把得到的结果告诉zzx。

    输入

    首先是整数T (T<=50) 代表测试数据组数。

    对于每组测试数据:

    第一行是一个字符串S(只包含数字,大小写字母,长度不超过100);

    第二行是一个整数Q(Q < 50),代表查询次数;

    接下来是Q行输入查询参数, 格式为 [start:end:step] , start,end,step都为整数且step不为0,保证所有出现的整数不超过C语言的int范围。

    输出

    对于每个查询输出一行,即python的S[start:end:step],如果查询结果为空,输出“#”.

    样例输入

    2
    python
    5
    [0:4:1]
    [-6:-2:1]
    [-2:0:-1]
    [10:-10:-2]
    [4:0:-2]
    WelcomeToHnustAcm117
    3
    [-1:-2:1]
    [-2:-1:1]
    [0:-6:1]
    #include <cstdio>
    #include <cstring>
    int absa(int a)
    {
        return a>0?a:-a;
    }
    int main()
    {
        char s[110];
        int t,n,sta,staa,en,enn,ste,i,bi,o,flag;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%s %d",s,&n);
            for(o=0;o<n;o++)
            {
                int l=strlen(s);
                getchar();
                scanf("%*c%d:%d:%d%*c",&sta,&en,&ste);
                bi=absa(ste);
                flag=0;
                if(ste>0)
                {
                    if(sta>=l||sta==-1||en==0||en<=-l)
                    {
                        printf("#
    ");
                        continue;
                    }
                    if(absa(sta)>=l) staa=0;
                    else if(sta<0) staa=l+sta;
                    else staa=sta;
                    if(absa(en)>l) enn=l;
                    else if(en<0) enn=l+en;
                    else enn=en;
                    for(i=staa;i<enn;i+=bi)
                    {
                        printf("%c",s[i]);
                        flag=1;
                    }
                    if(!flag) printf("#");
                    printf("
    ");
                }
                else
                {
                    if(sta==0||sta<=-l||en==-1||en>=l)
                    {
                        printf("#
    ");
                        continue;
                    }
                    if(absa(sta)>=l) enn=l-1;
                    else if(sta<0) enn=l+sta;
                    else enn=sta;
                    if(absa(en)>l) staa=-1;
                    else if(en<0) staa=l+en;
                    else staa=en;
                    for(i=enn;i>staa;i-=bi)
                    {
                        printf("%c",s[i]);
                        flag=1;
                    }
                    if(!flag) printf("#");
                    printf("
    ");
                }
    
            }
        }
        return 0;
    }
    View Code

    样例输出

    pyth
    pyth
    ohty
    nhy
    ot
    #
    1
    WelcomeToHnust

    将输入的下标转化成下标。再按-1和1来确定先后就基本没啥问题了。



  • 相关阅读:
    数据结构8.4_动态存储管理之伙伴系统
    http code码实验
    php问题
    对称加密和非对称加密
    公钥与私钥,HTTPS详解
    数字证书原理,公钥私钥加密原理
    简明 Nginx Location Url 配置笔记
    HTTP状态码精简版
    给你掰扯清楚什么是正向代理,什么是反向代理
    关键字
  • 原文地址:https://www.cnblogs.com/wandso/p/10062118.html
Copyright © 2011-2022 走看看