• ECNU 3135 数据压缩


    ECNU 3135 数据压缩

    链接

    https://acm.ecnu.edu.cn/problem/3135

    题目

    单点时限: 2.0 sec

    内存限制: 256 MB

    RLE (Run Length Encoding)算法是一个简单高效的无损数据压缩算法。

    算法的基本思路 :

    (1)、把数据看成一个线性序列;

    (2)、用一个字节表示数据重复的次数,然后在这个字节后面存储对应的数据。

    例如,数据序列 AAAAABBCD,采用 RLE 算法压缩为:5A2B1C1D。

    (3)、由于只采用一个字节存储数据重复次数,其最大值为 255;因此对于数据序列的某一个数据重复次数大于 255 时,则当计数到 255 时就必须强制将计数值和当前数据值写入,然后再重新开始计数。

    例如,数据序列:

    采用 RLE 算法压缩为:255A7A5B2C1D1E3P

    输入格式
    第 1 行:一个整数 () 为问题数。

    接下来 T 行,每行输入一段文本数据,文本长度不超过 500 个字符。

    文本由可打印字符组成。

    输出格式
    对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。然后对应每个问题 , 在一行中输出压缩后的结果。

    样例
    input
    3
    AAAAABBCD
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBCCDEPPP
    fggggdfeir9999000;;dqqqq234ererrrrrrrrrrrrvvvvvvz
    output
    case #0:
    5A2B1C1D
    case #1:
    255A7A5B2C1D1E3P
    case #2:
    1f4g1d1f1e1i1r49302;1d4q1213141e1r1e12r6v1z

    思路

    问题不是很难,记录一个字符连续出现的次数,不同时输出,唯一需要考虑到的是连续255个字符,就要归零,这和最后直接输出不同,需要额外增加一个flag。

    代码

      public static void fun() {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
    
        for (int i = 0; i < n; i++) {
    
          String line = sc.next();
          StringBuffer sb = new StringBuffer(line);
          System.out.println("case #" + i + ":");
          int count = 1;
          int flag = 0;
          char temp = sb.charAt(0);
          for (int j = 1; j < sb.length(); j++) {
            if (sb.charAt(j) == temp) {
              count++;
              if (count == 255) {
                System.out.print(count + "" + temp);
                if (j + 1 < sb.length()) {
                  temp = sb.charAt(j + 1);
                  count = 1;
                  j++;
                } else {
                  flag = 1;
                }
              }
            } else {
              System.out.print(count + "" + temp);
              count = 1;
              temp = sb.charAt(j);
            }
          }
          if (count > 0 && flag == 0) {
            System.out.println(count + "" + temp);
          } else {
            System.out.println();
          }
        }
    
      }
    
  • 相关阅读:
    Win7 中出现图标显示不全或消失的解决方法
    动态控制ToolStrip上ToolStripButton的图标大小
    TS——类型断言
    TS——函数的类型
    TS之对象类型——接口
    TS——联合类型
    Git文件合并
    1-1、作用域深入和面向对象
    webStrom2017.1版本如何添加vue.js插件
    二:搭建一个webpack3.5.5项目:建立项目的webpack配置文件
  • 原文地址:https://www.cnblogs.com/blogxjc/p/14382821.html
Copyright © 2020-2023  润新知