还是模拟题,模拟题中的括号的计数方法,先将输入的数字转化为最原始的括号形式,再按照题目要求的第二种括号匹配来计算出要求的算式
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int Maxsize = 100010; int main() { int n,m; char data[Maxsize]; int p[25],w[25]; cin>>n; while(n--) { cin>>m; int flag[Maxsize]; memset(flag,0,sizeof(flag)); for(int i = 0 ; i < m ; i++) { cin>>p[i]; } int cur = 0; int left = 0,right = 0; for(int i = 0 ; i <m ; i++) { for(int j = cur ; left < p[i]; j++) { data[j] = '<'; left++; } cur = right + left; data[cur] = '>'; right++; cur++; } for(int i = 0 ; i < cur ; i++) { int temp = 0; if(data[i] == '>') { temp = 0; for(int j = i-1 ; j >= 0 ; j--) { if(data[j] == '<') { temp++; if(!flag[j]) { flag[j] = 1; break; } } } } if(temp > 0) { cout<<temp<<" "; } } cout<<endl; } return 0; }