美文网首页
蓝桥杯:压缩变换--Python解法

蓝桥杯:压缩变换--Python解法

作者: 冒泡泡de可乐 | 来源:发表于2019-12-08 18:04 被阅读0次

问题描述:

小明最近在研究压缩算法。
他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比。
然而,要使数值很小是一个挑战。

最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面出现的数字很大可能是刚出现过不久的数字。对于这种特殊的序列,小明准备对序列做一个变换来减小数字的值。

变换的过程如下:
从左到右枚举序列,每枚举到一个数字,如果这个数字没有出现过,刚将数字变换成它的相反数,如果数字出现过,则看它在原序列中最后的一次出现后面(且在当前数前面)出现了几种数字,用这个种类数替换原来的数字。

比如,序列(a1, a2, a3, a4, a5)=(1, 2, 2, 1, 2)在变换过程为:
a1: 1未出现过,所以a1变为-1;
a2: 2未出现过,所以a2变为-2;
a3: 2出现过,最后一次为原序列的a2,在a2后、a3前有0种数字,所以a3变为0;
a4: 1出现过,最后一次为原序列的a1,在a1后、a4前有1种数字,所以a4变为1;
a5: 2出现过,最后一次为原序列的a3,在a3后、a5前有1种数字,所以a5变为1。
现在,给出原序列,请问,按这种变换规则变换后的序列是什么。

输入格式:

输入第一行包含一个整数n,表示序列的长度。
第二行包含n个正整数,表示输入序列。

输出格式:

输出一行,包含n个数,表示变换后的序列。

例如,输入:

5
1 2 2 1 2

程序应该输出:

-1 -2 0 1 1

再例如,输入:

12
1 1 2 3 2 3 1 2 2 2 3 1

程序应该输出:

-1 0 -2 -3 1 1 2 2 0 0 2 2

数据规模与约定

对于30%的数据,n<=1000;
对于50%的数据,n<=30000;
对于100%的数据,1 <=n<=100000,1<=ai<=10^9

资源约定:

峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 3000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

代码

import copy
def run():
    n = int(input())
    num_list = [int(i) for i in input().split()]
    change_list = copy.deepcopy(num_list)
    no_appear_set = set(num_list)
    appear_dict = dict()

    for i in range(n):
        num = num_list[i]
        if num in no_appear_set:
            appear_dict[num] = i
            no_appear_set.remove(num)
            change_list[i] = -num
        else:
            lener = len(set(num_list[appear_dict[num]+1:i]))
            appear_dict[num] = i
            change_list[i] = lener
    print(" ".join(str(i) for i in change_list))

run()

相关文章

  • 蓝桥杯:压缩变换--Python解法

    问题描述: 小明最近在研究压缩算法。他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比。然而,...

  • 蓝桥杯:字母图像--Python解法

    问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE D...

  • 蓝桥杯:闰年判断--Python解法

    问题描述 给定一个年份,判断这一年是不是闰年。 当以下情况之一满足时,这一年是闰年: 年份是4的倍数而不是100的...

  • 蓝桥杯:阶乘计算--Python解法

    问题描述 输入一个正整数n,输出n!的值。其中n!=123…n。 算法描述 n!可能很大,而计算机能表示的整数范围...

  • 蓝桥杯:数列特征--Python解法

    问题描述 给出n个数,找出这n个数的最大值,最小值,和。 输入格式 第一行为整数n,表示数的个数。 第二行有n个数...

  • 蓝桥杯:查找整数--Python解法

    问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。 输入格式 第一行包含一个整数n。 第...

  • 蓝桥杯:回文数--Python解法

    问题描述 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。 输出格式 按从...

  • 蓝桥杯:交换瓶子--Python解法

    问题描述: 有N个瓶子,编号 1 ~ N,放在架子上。比如有5个瓶子:2 1 3 5 4 要求每次拿起2个瓶子,交...

  • 蓝桥杯:饮料换购--Python解法

    问题描述: 乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环...

  • 蓝桥杯:移动距离--Python解法

    问题描述: X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...当排满一行时,从下一...

网友评论

      本文标题:蓝桥杯:压缩变换--Python解法

      本文链接:https://www.haomeiwen.com/subject/mugmgctx.html