Permutation Recovery
Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 453 Accepted Submission(s): 314
Problem Description
Professor Permula gave a number of permutations of the n integers 1, 2, ..., n to her students. For each integer i (1 <= i <= n), she asks the students to write down the number of integers greater than i that appears before i in the given permutation. This number is denoted ai. For example, if n = 8 and the permutation is 2,7,3,5,4,1,8,6, then a1 = 5 because there are 5 numbers (2, 7, 3, 5, 4) greater than 1 appearing before it. Similarly, a4 = 2 because there are 2 numbers (7, 5) greater than 4 appearing before it.
John, one of the students in the class, is studying for the final exams now. He found out that he has lost the assignment questions. He only has the answers (the ai's) but not the original permutation. Can you help him determine the original permutation, so he can review how to obtain the answers?
John, one of the students in the class, is studying for the final exams now. He found out that he has lost the assignment questions. He only has the answers (the ai's) but not the original permutation. Can you help him determine the original permutation, so he can review how to obtain the answers?
Input
The input consists of a number of test cases. Each test case starts with a line containing the integer n (n <= 500). The next n lines give the values of a1, ..., an. The input ends with n = 0.
Output
For each test case, print a line specifying the original permutation. Adjacent elements of a permutation should be separated by a comma. Note that some cases may require you to print lines containing more than 80 characters.
Sample Input
8 5 0 1 2 1 2 0 0 109 8 7 6 5 4 3 2 1 0 0
Sample Output
2,7,3,5,4,1,8,6 10,9,8,7,6,5,4,3,2,1
理解题意是关键,理解了题意就很简单了.........
题意:
给出一个数,代表某个序列一共有n个数,下面给出 n 个数,第 i 个数是 x 代表,i 的前面有 x 个数比 i 大...
然后直接对数组进行插入数值的操作就可以了.............
插入某一个数的时候,比这个数小的不需要考虑,只需要数空下来的位置就可以了.至于为什么,自己想想看
.代码如下:
#include<stdio.h>
#include<string.h>
int n,x[10005];
int main()
{
while(~scanf("%d",&n),n)
{
memset(x,0,sizeof(x));
for(int i=1;i<=n;++i)
{
int a,j,cnt=0;
scanf("%d",&a);
for(j=1;cnt<=a;++j)//循环输入
{
if(!x[j])//查找统计
{
if(cnt==a)
{
x[j]=i;
break;
}
++cnt;
}
}
}
for(int i=1;i<n;++i)
{
printf("%d,",x[i]);//输出
}
printf("%d\n",x[n]);
}
return 0;
}