题意
给你一个整数 n n n,表示有 n n n 头奶牛,每头奶牛的品牌号码都是 1 ∼ n 1\sim n 1∼n 的整数,告诉了你每一头奶牛前面的比它品牌号码小的奶牛数,让你按顺序输出奶牛的品牌。
分析
当我们知道了一头奶牛前面的奶牛的品牌号码的顺序,还有这头奶牛前面有多少头奶牛比它品牌号码小的时候,就可以知道这头奶牛排在第几个。
比如现在告诉你这头奶牛前面有 x x x 头奶牛的品牌号码已排好顺序,还告诉你这头奶牛前面有 y y y 头奶牛的品牌号码比它小,那么,这头奶牛的品牌号码就在 y y y 和 y + 1 y+1 y+1 之间。
Code
#include <cstdio>
using namespace std;
int n, t, a[8007], bz[8007];
int main()
{
// 第一个位置
a[1] = 1;
scanf ("%d", &n);
for (int i = 2; i <= n; i++)
{
// 这个品牌的奶牛有多少
scanf ("%d", &t);
// 向后移,移到t+1的位置,腾出位置放新的奶牛
for (int j = n; j >= t + 1; j--)
a[j + 1] = a[j];
// 当前t+1的位置放新奶牛
a[t + 1] = i;
}
// 从第n头奶牛开始往前推,记录奶牛品牌
for (int i = n; i >= 1; i--)
bz[a[i]] = i;
// 输出
for (int i = 1; i <= n; i++)
printf ("%d\n", bz[i]);
return 0;
}
完结撒花。