洛谷题解:P10497 [USACO03Open] Lost Cows

题目传送门。

题意


给你一个整数 n n n,表示有 n n n 头奶牛,每头奶牛的品牌号码都是 1 ∼ n 1\sim n 1n 的整数,告诉了你每一头奶牛前面的比它品牌号码小的奶牛数,让你按顺序输出奶牛的品牌。

分析


当我们知道了一头奶牛前面的奶牛的品牌号码的顺序,还有这头奶牛前面有多少头奶牛比它品牌号码小的时候,就可以知道这头奶牛排在第几个。

比如现在告诉你这头奶牛前面有 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;
}

AC 记录。

完结撒花。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值