题目
题解思路
贪心 思路
要让最短 就是让大的数尽可能的出现在前面
最长则相反
一开始想拼接出来,无奈写的太多问题放弃了。
参考文章
最短 就先让 全部数字先从大到小输入进去 再控制他符合题目的条件
这里用了一个revers反转数组 元素 属实巧妙
最大就相反
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#include <map>
#include <string>
using namespace std;
const int INF = 0x3f3f3f3f;
char s[200100];
int a[200100];
int main ()
{
ios::sync_with_stdio(false);
int T;
cin>>T;
while(T--)
{
int n;
cin>>n>>s+1;
//最短
for (int i = 1 ; i <= n ; i++ ) a[i] = n - i + 1 ;
for (int i = 1 ; i < n ; )
{
int j = i ;
while(s[j] == '<' ) j++ ;
reverse( a + i , a + j + 1 );
i = j + 1;
}
for (int i = 1 ; i <= n ; i++ ) cout<<a[i]<<" ";
cout<<"\n";
//最长
for (int i = 1 ; i <= n ; i++ ) a[i] = i;
for (int i = 1 ; i < n ;)
{
int j = i;
while(s[j] == '>' ) j++;
reverse( a + i , a + j + 1 );
i = j + 1;
}
for (int i = 1 ; i <= n ; i++ ) cout<<a[i]<<" ";
cout<<"\n";
}
return 0 ;
}