这个题有毒,,,不难却让我在那搞了半天,其实一开始的思维是错的,一直在那里凑,
题目 注意,是每天都要求输出,如果没有就输出空格;
而我的思路是将所有的数存储好后,排好序,寻找当前的数字与之前的各个数字的最大id的差值,即是需要输出的空行数,
#include <iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int maxn=100000+5;
struct num
{
int x,id;
};
bool cmp(const num &a,const num& b)
{
return a.x>b.x;
}
num s[maxn];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{ scanf("%d",&s[i].x);
s[i].id=i;
}
sort(s,s+n,cmp);
int have=0;
int ha=s[0].id;
for(int j=0;j<ha;j++)
{
printf("\n");
}
printf("%d",s[0].x);
int t=s[0].id;
for(int i=1;i<n;i++)
{
if(t>s[i].id)
{printf(" %d",s[i].x);
}
else
{
int ha=s[i].id-t;
for(int j=0;j<ha&&ha!=0;j++)
{
printf("\n");
}
printf("%d",s[i].x);
if(s[i].id>t)
t=s[i].id;
}
}
return 0;
}
一组测试用例,还比较好
9
2 9 8 7 4 3 1 5 6
9
2 8 9 1 3 4 5 6 7
9
2 6 9 1 8 7 4 5 3
9
4 7 8 9 1 2 6 3 5
9
1 2 3 4 5 6 7 8 9
9
8 9 7 1 2 6 3 5 4
9
7 9 6 8 1 2 5 4 3
恩确实比较简单,当时我一定是傻了,日常智障