POJ 2182 Lost Cows vector数组解法
题目
Lost Cows
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 11766 | Accepted: 7570 |
Description
N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular display of poor judgment, they visited the neighborhood 'watering hole' and drank a few too many beers before dinner. When it was time to line up for their evening meal, they did not line up in the required ascending numerical order of their brands.
Regrettably, FJ does not have a way to sort them. Furthermore, he's not very good at observing problems. Instead of writing down each cow's brand, he determined a rather silly statistic: For each cow in line, he knows the number of cows that precede that cow in line that do, in fact, have smaller brands than that cow.
Given this data, tell FJ the exact ordering of the cows.
Regrettably, FJ does not have a way to sort them. Furthermore, he's not very good at observing problems. Instead of writing down each cow's brand, he determined a rather silly statistic: For each cow in line, he knows the number of cows that precede that cow in line that do, in fact, have smaller brands than that cow.
Given this data, tell FJ the exact ordering of the cows.
Input
* Line 1: A single integer, N
* Lines 2..N: These N-1 lines describe the number of cows that precede a given cow in line and have brands smaller than that cow. Of course, no cows precede the first cow in line, so she is not listed. Line 2 of the input describes the number of preceding cows whose brands are smaller than the cow in slot #2; line 3 describes the number of preceding cows whose brands are smaller than the cow in slot #3; and so on.
* Lines 2..N: These N-1 lines describe the number of cows that precede a given cow in line and have brands smaller than that cow. Of course, no cows precede the first cow in line, so she is not listed. Line 2 of the input describes the number of preceding cows whose brands are smaller than the cow in slot #2; line 3 describes the number of preceding cows whose brands are smaller than the cow in slot #3; and so on.
Output
* Lines 1..N: Each of the N lines of output tells the brand of a cow in line. Line #1 of the output tells the brand of the first cow in line; line 2 tells the brand of the second cow; and so on.
Sample Input
5 1 2 1 0
Sample Output
2 4 5 3
1
题目大意就是牛的编号是1~n,给你个序列a表示第i头牛前面有a[i]头牛的编号比它小(第一头前面没有牛就省略了,从第二头牛开始),让你输出牛的编号的排列。
本来是想练一下树状数组的,但想了想用vector数组就能轻松解决。
分析:
首先我们知道这个序列越靠前的话,不确定的元素越多,所以我们从后往前推,当前序列最后一个元素是一定能确定的。
For example:
样例中的序列1 2 1 0能确定最后一位的编号是1,因为前n-1个编号没有一个比它小,然后将0删去,得到新的数列1 2 1,又看末尾,以此类推(编号1的牛也被删了)......
这个时候用vector数组非常不错,erase既可以删掉某个元素,又能把后面的元素移过来;vector存的是1到n的编号。问题完美解决!!!
#include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<algorithm> using namespace std; int n,num[8005],ans[8005]; vector<int>vv; int main() { cin>>n; for(int i=1;i<n;i++) { scanf("%d",&num[i]); vv.push_back(i); } vv.push_back(n); for(int i=n-1;i>=1;i--) { int bit=num[i]; ans[i+1]=vv[bit]; vv.erase(vv.begin()+bit); } ans[1]=vv[0]; for(int i=1;i<=n;i++) printf("%d\n",ans[i]); return 0; }

浙公网安备 33010602011771号