• noip2007 字符串的展开


    开始做noip的套题。

    做完这道题想把它记下来。题目不难,模拟即可,考察的是字符串的处理。

    本题真正值得注意的是全面考虑问题,这也是noip模拟题重点考察的内容。包括noip 2003 侦探推理。

    这两道题都是模拟,但是特判的情况很多。以本题为例,我没有考虑【两个--】的情况,【-在开头】的情况,和【字母-数字】,【数字-字母】的情况

    而且数组大小估计错误,蹦了一个点。

    第一编写完只有40分。

    经过思考,加上了【-在开头】的情况,和【字母-数字】,【数字-字母】三种情况,70分;

    最后比对数据,才意识到【两个--】的情况和超内存的问题,改后AC;

    另外,当初侦探推理那道题写完只有20分,几乎是对照数据一个点一个点改过的。。。。= =

    客观的说,这两道题的数据都是很科学的,每种情况都有对应的1、2个点,几乎是加一个特判过一个点。


    总之,通过做此题,发现几个要注意的问题:

    第一、认真审题,认真分析!!!!! 虽然老生常谈了,但是每次都会忽略。尤其是搜索和模拟,注意特判剪枝以及不合法情况!!!!!!

    第二、仔细分析时间复杂度和空间复杂度。 其实说白了还是要认真分析问题。如果空间或时间分析错误就太可惜了。

    第三、多做测试。不要以为题中的测试数据很强大。其实题中的数据通常蒟蒻!甚至会故意坑人。总之,要不怕麻烦,自己设计数据,而且要注意极端数据。

    附带本题代码

    View Code
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 int a,b,c;
     5 char x[500000],t[500000];
     6 int main()
     7 {
     8     freopen("expand.in","r",stdin);
     9     freopen("expand.out","w",stdout);
    10     scanf("%d%d%d",&a,&b,&c);
    11     scanf("%s",x);
    12     char temp[500000];
    13     int e=strlen(x);
    14     int i,j,k,w,s;
    15     k=0;
    16     for (i=0;i<e;i++)
    17     {
    18         if ('a'<=x[i]&&x[i]<='z') {t[k++]=x[i];}
    19         if ('0'<=x[i]&&x[i]<='9') {t[k++]=x[i];}
    20         if (x[i]=='-')
    21         {
    22             if (i==0)   {t[k++]=x[i];continue;}//////////
    23             if (x[i-1]=='-')    {t[k++]=x[i];continue;}//////////
    24             if (x[i-1]==x[i+1]-1)   continue;//do nothing
    25             if (x[i-1]>=x[i+1]) {t[k++]=x[i];continue;}
    26             if ('a'<=x[i-1]&&x[i-1]<='z'&&'0'<=x[i+1]&&x[i+1]<='9') {t[k++]=x[i];continue;}////////
    27             if ('a'<=x[i+1]&&x[i+1]<='z'&&'0'<=x[i-1]&&x[i-1]<='9') {t[k++]=x[i];continue;}/////////
    28             if (a==1)
    29             {
    30                 j=0;
    31                 for (s=x[i-1]+1;s<x[i+1];s++)
    32                     for (w=0;w<b;w++)
    33                         temp[j++]=s;
    34             }
    35             if (a==2)
    36             {
    37                 j=0;
    38                 if ('a'<=x[i-1]&&x[i-1]<='z')
    39                     for (s=x[i-1]+1;s<x[i+1];s++)
    40                         for (w=0;w<b;w++)
    41                             temp[j++]=s-'a'+'A';
    42                 if ('0'<=x[i-1]&&x[i-1]<='9')
    43                     for (s=x[i-1]+1;s<x[i+1];s++)
    44                         for (w=0;w<b;w++)
    45                             temp[j++]=s;
    46             }
    47             if (a==3)
    48             {
    49                 j=0;
    50                 for (s=x[i-1]+1;s<x[i+1];s++)
    51                     for (w=0;w<b;w++)
    52                         temp[j++]='*';
    53             }
    54             if (c==1)
    55                 for (s=0;s<j;s++)
    56                     t[k++]=temp[s];
    57             if (c==2)
    58                 for (s=j-1;s>=0;s--)
    59                     t[k++]=temp[s];
    60         }
    61     }
    62     for (i=0;i<k;i++)
    63         printf("%c",t[i]);
    64     printf("\n");
    65     return 0;
    66 }

    其中加////////////的语句都是一开始没想到的。
    That‘s all.

  • 相关阅读:
    iOS蓝牙开发(4.0)详解
    iOS开发--MQTT实时处理数据
    BBWebImage 设计思路
    SDWebImage 加载显示 GIF 与性能问题
    iOS 图片压缩方法
    SDWebImage 加载显示 WebP 与性能问题
    NSTimer、CADisplayLink 内存泄漏
    iOS 使用矢量图
    LeetCode #36 Valid Sudoku
    LeetCode #35 Search Insert Position
  • 原文地址:https://www.cnblogs.com/loveidea/p/2538769.html
Copyright © 2020-2023  润新知