编码和解码问题pascal

设有一个数组A:ARRAY[1..N] OF INTEGER;数组中存储的元素为1-N之间的整数,且A[I]≠A[J] (当I≠J)时,(N<=3000)
例如:N=5时,有:(4,3,5,1,2)
此时,数组A的编码定义如下:
A[1]的编码为0:
A[I]的编码为:在A[1],A[2],……A[I-1]中比A[I]的值小的元素的个数(I=1,2,……N)
所以上面数组A的编码为:B=(0,0,2,0,1)
现给出一组数,要求出其编码; 给出一组编码,要求你能解码;
输出的数与数之间有一个空格,不能有多余的空格.
输入的第一行是n,m
第二行是n个数,表示数组A;
第三行是m个数,表示这m个数的编码.
输出共两行,第一行是n个数的编码,第二行是m个数的原码.
严格按照要求

求编码这个你应该会的吧
就每个扫过来就行了 n^2的

然后就是解码
我现在只能想到一个比较简单的方法但是可以过
先建一个m个boolean值的数组
全true
然后从最后一个值开始往回推
这个值假如是k 则这个数就是在那个boolean值数组里还是true的值的第k+1个
然后把这个数对应的boolean赋为false
就这样就可以求出来了

附上一小段代码以作解释
var
f:array[1..1000] of boolean;

begin
init;

for i:=m downto 1 do
begin
s:=1;
while b[i]>=0 do
begin
if f[s] then dec(b[i]);
inc(s);
end;
ans[i]:=s-1;
f[s-1]:=false;
end;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-03
这是某年NOIP的题,你可以搜搜看。貌似是96年的。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网