游客 Signup | Login
中文 | En

2312 - 编码问题

设有一个数组 A:ARRAY[0..N-1] OF INTEGER;数组中存放的元素为0N-1之间的整数,且A[i]A[j](当ij时)。

例如:

       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=12……N-1

    ∴上面数组A的编码为:B=(0,0,0,3,1,2)

程序要求解决以下问题:

①   给出数组A后,求出其编码;

②   给出数组A的编码后,求出A中的原数据。


<br />

Input

每个测试文件只包含一组测试数据,每组输入包含三行。

第一行输入整数N;

第二行输入有两种可能:

例如:

A=(4,3,0,5,1,2)

B=(0,0,0,3,1,2)

其中输入中的逗号和括号都是英文状态下的。

Output

当输入的是A=(...),则输出其编码。

当输入的是B=(...),则输出A中的原数据。

输出数据的格式和输入数据的格式是一样的。

Examples

Input

6
A=(4,3,0,5,1,2)

Output

B=(0,0,0,3,1,2)

Hint

6
B=(0,0,0,3,1,2)
------------------
A=(4,3,0,5,1,2)

Solution 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;
}


Solution 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;
}

Hint

6
B=(0,0,0,3,1,2)
------------------
A=(4,3,0,5,1,2)

Time Limit 1 second
Memory Limit 125 MB
Discuss Stats
上一题 下一题