根据P序列可以恢复出括号序列,然后就可以计算W序列了。
#include<iostream> using namespace std; int main() { int t; cin>>t; for (int ii=0; ii<t; ii++) { int n, sum = 0, p = 0; char parenthese[100] = {0}; cin>>n; for (int i=0; i<n; i++) { int buf; cin>>buf; for (int j=sum; j<buf; j++) parenthese[p++] = '('; parenthese[p++] = ')'; sum = buf; } bool match[100] = {false}; for (int i=0; i<n; i++) { int j; for (j=0; j<p; j++) if (parenthese[j] == ')' && !match[j]) break; match[j] = true; int number = 0; for (int k=j-1; k>=0; k--) { if (parenthese[k] == '(') number++; if (parenthese[k] == '(' && !match[k]) { match[k] = true; break; } } if (i < n-1) cout<<number<<' '; else cout<<number<<endl; } } }