2312 - 编码问题
时间限制 : 1 秒
内存限制 : 125 MB
设有一个数组 A:ARRAY[0..N-1] OF INTEGER;数组中存放的元素为0~N-1之间的整数,且A[i]≠A[j](当i≠j时)。
例如:
N=6时,有:A=(4,3,0,5,1,2)
此时,数组A的编码定义如下:
A[0]的编码为0;
A[i]的编码为:在A[0],A[1],……A[i-1]中比A[i]的值小的个数(i=1,2……N-1)
∴上面数组A的编码为:B=(0,0,0,3,1,2)
程序要求解决以下问题:
① 给出数组A后,求出其编码;
② 给出数组A的编码后,求出A中的原数据。
<br />
题目输入
每个测试文件只包含一组测试数据,每组输入包含三行。
第一行输入整数N;
第二行输入有两种可能:
例如:
A=(4,3,0,5,1,2)
或
B=(0,0,0,3,1,2)
其中输入中的逗号和括号都是英文状态下的。
题目输出
当输入的是A=(...),则输出其编码。
当输入的是B=(...),则输出A中的原数据。
输出数据的格式和输入数据的格式是一样的。
输入/输出样例
输入格式
6 A=(4,3,0,5,1,2)
输出格式
B=(0,0,0,3,1,2)
C语言解答
#include<stdio.h> int main() { //freopen("in.txt","r",stdin); int n,i=0,j,x[1000],flag[1000]={0},fz[1000],sc[1000]; scanf("%d",&n); char c,d; getchar(); c=getchar(); while(d=getchar()) {if('0'<=d&&d<='9') x[i++]=d-'0';if(d==')') break;} for(i=0;i<n;i++) fz[i]=i; if(c=='A') { for(i=0;i<n;i++) { int count=0; for(j=0;j<i;j++) if(x[j]<x[i]) ++count; sc[i]=count; } printf("B=("); for(i=0;i<n;i++) if(i!=n-1) printf("%d,",sc[i]);else printf("%d)\n",sc[i]); } else { for(i=n-1;i>=0;i--) { int j=0,count =0; for(count;count<=x[i];) { if(flag[j++]==0) count++; } sc[i]=fz[j-1];flag[j-1]=1; } printf("A=("); for(i=0;i<n;i++) if(i!=n-1) printf("%d,",sc[i]);else printf("%d)\n",sc[i]); } return 0; }
C++解答
#include<stdio.h> int main() { //freopen("in.txt","r",stdin); int n,i=0,j,x[1000],flag[1000]={0},fz[1000],sc[1000]; scanf("%d",&n); char c,d; getchar(); c=getchar(); while(d=getchar()) {if('0'<=d&&d<='9') x[i++]=d-'0';if(d==')') break;} for(i=0;i<n;i++) fz[i]=i; if(c=='A') { for(i=0;i<n;i++) { int count=0; for(j=0;j<i;j++) if(x[j]<x[i]) ++count; sc[i]=count; } printf("B=("); for(i=0;i<n;i++) if(i!=n-1) printf("%d,",sc[i]);else printf("%d)\n",sc[i]); } else { for(i=n-1;i>=0;i--) { int j=0,count =0; for(count;count<=x[i];) { if(flag[j++]==0) count++; } sc[i]=fz[j-1];flag[j-1]=1; } printf("A=("); for(i=0;i<n;i++) if(i!=n-1) printf("%d,",sc[i]);else printf("%d)\n",sc[i]); } return 0; }
Python解答
def fmin(a, n): a.sort() return a.pop(int(n)) def func(a): s = "" if a[0] == "A": s = "B=(0," for x in xrange(1,len(a[1])): c = 0 for i in xrange(0,x): c += a[1][i] < a[1][x] s += str(c) + [')', ','][x < len(a[1]) - 1] elif a[0] == "B": s = "A=(" t = [] b = [i for i in xrange(0, len(a[1]))] for x in xrange(len(a[1]) - 1, -1, -1): t.append(fmin(b, a[1][x])) t.reverse() for x in xrange(0,len(t)): s += str(t[x]) + [')', ','][x < len(t) - 1] return s n = raw_input() while (n): s = raw_input() a = [s[0], s[3:len(s) - 1].split(",")] print func(a) n = raw_input()