标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 9669 | Accepted: 6228 |
Description
Input
Output
Sample Input
5 1 2 1 0
Sample Output
2 4 5 3 1
跟fzu月赛的一道题很像,当时是从前往后找,现在应该是从后往前找,第i个数应是原顺序序列中的第rcd[i]+1小的数
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<stack> using namespace std; const int inf=1<<25; int n; int rcd[10000]; void in_put() { cin>>n; for(int i=2;i<=n;++i) cin>>rcd[i]; } void solve() { int i,j; stack<int>s; int num[10000]; for(i=0;i<=n;++i) num[i]=i; for(i=n;i>=2;i--){//从后往前找1 2 3 4...n中的第n小的数 int cnt=0; for(j=1;j<=n;++j){ if(num[j]!=inf) cnt++; if(cnt==rcd[i]+1) break; } s.push(num[j]); num[j]=inf;//找到一个后标记为大值inf } for(int i=1;i<=n;++i) if(num[i]!=inf) {s.push(i);break;}//把第一个也压入栈 while(!s.empty()){ cout<<s.top()<<endl; s.pop(); } } int main() { in_put(); solve(); return 0; }
标签:
原文地址:http://www.cnblogs.com/orchidzjl/p/4419023.html